一、完整的PLSQL过程示例

  1. CREATE OR REPLACE PROCEDURE PTYZH_CXJTZHXX_XB(o_result OUT SYS_REFCURSOR,
  2. i_pageno IN NUMBER,
  3. i_pagelength IN NUMBER,
  4. i_totalrows OUT NUMBER,
  5. i_ywxt IN VARCHAR2, --业务系统
  6. i_khh IN VARCHAR2, --客户号
  7. i_yyb IN NUMBER, --营业部
  8. i_ssdw IN VARCHAR2, --所属单位
  9. i_sj IN VARCHAR2, --认证手机
  10. i_email IN VARCHAR2, --认证邮箱
  11. i_rzrq_start IN NUMBER, --认证日期
  12. i_rzrq_end IN NUMBER, --认证日期
  13. i_bdrq_start IN NUMBER, --绑定日期
  14. i_bdrq_end IN NUMBER, --绑定日期
  15. i_yhlx IN NUMBER, --用户类型
  16. i_yhqx IN VARCHAR2, --是否中航证券员工
  17. i_cid IN VARCHAR2 --是否绑定交易账号
  18. ) AS
  19. l_collist VARCHAR2(32767);
  20. l_code NUMBER(10);
  21. l_note VARCHAR2(100);
  22. l_sort VARCHAR2(100);
  23. l_sql VARCHAR2(3000);
  24. l_sql1 VARCHAR2(1500);
  25. l_where VARCHAR2(2000);
  26. BEGIN
  27. l_sort := ' a.khh ';
  28. l_collist := ' * ';
  29. l_sql := 'select a.cid,a.khh,a.khmc,case when a.ywxt=1000 then ''集中交易'' else ''融资融券'' end as ywxt,a.yyb,a.sj,a.ssdw,a.rzksrq,a.bdrq,case when a.yhlx=1 then ''集团户'' else ''亲友户'' end as yhlx,case when a.yhqx=1 then ''是'' else ''否'' end as yhqx,a.email,a.tjr,a.fid from ';
  30. l_sql1 := '(select c.cid,a.khh,c.khmc,a.ywxt,a.yyb,c.sj,c.ssdw,c.rzksrq,c.bdrq,c.yhlx,c.yhqx,c.email,c.tjr,c.fid
  31. from tywzh a,(select b.khh,a.khmc,a.sj,a.rzksrq,a.bdrq,a.yhlx,a.ssdw,a.yhqx,a.email,a.tjr,a.cid,a.fid from tjtzhxx a,tkhxx b where (a.cid=b.cid and b.khzt=0 and b.ygtcid is not null) or (a.sj=b.sj and b.khmc=a.khmc and a.cid is null and b.khzt=0 and b.ygtcid is not null)) c
  32. where a.khh=c.khh) a';
  33. l_where := ' where a.ywxt in (1000,1001) ';
  34. --业务系统做为查询条件
  35. IF i_ywxt IS NOT NULL THEN
  36. l_where := l_where || ' and a.ywxt = ' || i_ywxt;
  37. END IF;
  38. --客户号做为查询条件
  39. IF i_khh IS NOT NULL THEN
  40. l_where := l_where || ' and a.khh = ''' || i_khh || '''';
  41. END IF;
  42. --认证所属单位作为查询条件
  43. IF i_ssdw IS NOT NULL THEN
  44. l_where := l_where || ' and a.ssdw like ''%' || i_ssdw || '%''';
  45. END IF;
  46. --认证手机号作为查询条件
  47. IF i_sj IS NOT NULL THEN
  48. l_where := l_where || ' and a.sj = ' || i_sj;
  49. END IF;
  50. --营业部作为查询条件
  51. IF i_yyb IS NOT NULL THEN
  52. l_where := l_where || ' and a.yyb = ' || i_yyb;
  53. END IF;
  54. --认证邮箱作为查询条件
  55. IF i_email IS NOT NULL THEN
  56. l_where := l_where || ' and a.email like ''%' || i_email || '%''';
  57. END IF;
  58. --用户类型做为查询条件
  59. IF i_yhlx IS NOT NULL THEN
  60. l_where := l_where || ' and a.yhlx = ' || i_yhlx;
  61. END IF;
  62. --是否中航证券员工做为查询条件
  63. IF i_yhqx IS NOT NULL THEN
  64. l_where := l_where || ' and a.yhqx = ' || i_yhqx;
  65. END IF;
  66. --认证日期作为查询条件
  67. IF i_rzrq_start IS NOT NULL AND i_rzrq_end IS NULL THEN
  68. l_where := l_where || ' and a.rzksrq >= ' || i_rzrq_start;
  69. END IF;
  70. IF i_rzrq_start IS NULL AND i_rzrq_end IS NOT NULL THEN
  71. l_where := l_where || ' and a.rzksrq <= ' || i_rzrq_end;
  72. END IF;
  73. IF i_rzrq_start IS NOT NULL AND i_rzrq_end IS NOT NULL THEN
  74. l_where := l_where || ' and a.rzksrq >= ' || i_rzrq_start ||
  75. ' and a.rzksrq <= ' || i_rzrq_end;
  76. END IF;
  77. --绑定日期作为查询条件
  78. IF i_bdrq_start IS NOT NULL AND i_bdrq_end IS NULL THEN
  79. l_where := l_where || ' and a.bdrq >= ' || i_bdrq_start;
  80. END IF;
  81. IF i_bdrq_start IS NULL AND i_bdrq_end IS NOT NULL THEN
  82. l_where := l_where || ' and a.bdrq <= ' || i_bdrq_end;
  83. END IF;
  84. IF i_bdrq_start IS NOT NULL AND i_bdrq_end IS NOT NULL THEN
  85. l_where := l_where || ' and a.bdrq >= ' || i_bdrq_start ||
  86. ' and a.bdrq <= ' || i_bdrq_end;
  87. END IF;
  88. --是否绑定交易账号作为查询条件1
  89. IF i_cid IS NOT NULL AND i_cid = 0 THEN
  90. l_where := l_where || ' and a.cid is null ';
  91. END IF;
  92. --是否绑定交易账号作为查询条件2
  93. IF i_cid IS NOT NULL AND i_cid = 1 THEN
  94. l_where := l_where || ' and a.cid is not null ';
  95. END IF;
  96. l_sql := l_sql || l_sql1 || l_where;
  97. dbms_output.put_line(l_sql);
  98. pcx_paging_query(l_code,
  99. l_note,
  100. o_result,
  101. i_pageno,
  102. i_pagelength,
  103. i_totalrows,
  104. sqls => l_sql,
  105. collist => l_collist,
  106. haswhere => TRUE,
  107. groupislast => CASE
  108. WHEN l_sort IS NULL THEN
  109. FALSE
  110. ELSE
  111. TRUE
  112. END,
  113. i_sort => l_sort,
  114. i_haswith => FALSE,
  115. i_recount => TRUE);
  116. END PTYZH_CXJTZHXX_XB;

二、过程示例解析

1、创建存储过程的语句

  1. CREATE OR REPLACE PROCEDURE 存储过程名称(参数1 参数类型,参数2 参数类型,参数3 参数类型...)

image.png
AS关键字:
AS —- 存储过程语法的一部分,AS之前是存储过程参数和属性定义,AS后面表示存储过程内容的定义。

2、存储过程的执行语句

1、过程变量赋值

image.png
BEGIN关键字:作为过程开始执行的标志;
END关键字:过程结束执行的标志;

2、sql语句条件变量赋值

image.png

3、最终拼接完整的sql语句

image.png
“||”符号:字符串连接符号,相当于“+”,将两个字符或字符串连接起来。
常见其作用于过程变量前后。