几个关于正确及错误PL/SQL对照使用的示例

Sql代码 复制代码
  1. /**   
  2.   
  3. 这是几个关于正确及错误PL/SQL对照使用的示例   
  4.   
  5. */   
  6.   
  7. create table test(tid int  primary key not null,tname varchar2(50));   
  8.   
  9. create sequence test_seq start with 1 increment by 1;   
  10.   
  11. insert into test values(test_seq.nextval,'FLB');   
  12.   
  13. insert into test values(test_seq.nextval,'FLB1');   
  14.   
  15. ---------------------------------   
  16.   
  17. --错误函数1   
  18.   
  19. create or replace function f   
  20.   
  21. return int  
  22.   
  23. begin  
  24.   
  25.        return 5*5;   
  26.   
  27. end;   
  28.   
  29. --错误函数2   
  30.   
  31. create or replace function f()   
  32.   
  33. return number   
  34.   
  35. is  
  36.   
  37. begin  
  38.   
  39.        return 5*5;   
  40.   
  41. end;   
  42.   
  43. --错误函数3   
  44.   
  45. create or replace function f   
  46.   
  47. return number   
  48.   
  49. begin  
  50.   
  51.        return 5*5;   
  52.   
  53. end;   
  54.   
  55. --该函数的正确函数1   
  56.   
  57. create or replace function f   
  58.   
  59. return number   
  60.   
  61. is  
  62.   
  63. begin  
  64.   
  65.        return 5*5;   
  66.   
  67. end;   
  68.   
  69. --该函数的正确函数2   
  70.   
  71. create or replace function f   
  72.   
  73. return int  
  74.   
  75. is  
  76.   
  77. begin  
  78.   
  79.        return 5*5;   
  80.   
  81. end;   
  82.   
  83. ------------------------------------   
  84.   
  85. --这是个正确函数,不过调试这个函数花了好几十分钟的时间,不熟悉了   
  86.   
  87. create or replace function f5   
  88.   
  89. (pid number)   
  90.   
  91. return varchar2   
  92.   
  93. is  
  94.   
  95.      rname varchar2(50);   
  96.   
  97.      cursor cname   
  98.   
  99.      is  
  100.   
  101.      select tname from test where tid=pid;   
  102.   
  103. begin  
  104.   
  105.      open cname;   
  106.   
  107.      fetch cname into rname;   
  108.   
  109.         
  110.   
  111.      return rname;   
  112.   
  113. end;   
  114.   
  115. --调用函数用call出错   
  116.   
  117. call f5(2);   
  118.   
  119. --调用出错,函数必须有值的接收者   
  120.   
  121. begin  
  122.   
  123.      f5(2);   
  124.   
  125. end;   
  126.   
  127. --这种方法调用不正确   
  128.   
  129. declare  
  130.   
  131. r varchar2;   
  132.   
  133. begin  
  134.   
  135.      r:=f5(2);   
  136.   
  137.      dbms_output.put_line(r);   
  138.   
  139. end;   
  140.   
  141. --这种方法调用正确   
  142.   
  143. begin  
  144.   
  145.      dbms_output.put_line(f5(2));   
  146.   
  147. end;   
  148.   
  149. --这种方法调用正确   
  150.   
  151. declare  
  152.   
  153. r varchar2(50);   
  154.   
  155. begin  
  156.   
  157.      r:=f5(2);   
  158.   
  159.      dbms_output.put_line(r);   
  160.   
  161. end;   
  162.   
  163. --正确函数   
  164.   
  165. create or replace function f4   
  166.   
  167. (ttid in integer)   
  168.   
  169. return varchar2   
  170.   
  171. is  
  172.   
  173.        rname varchar(50);   
  174.   
  175.        cursor cname   
  176.   
  177.        is    
  178.   
  179.        select tname from test where tid=ttid;   
  180.   
  181. begin  
  182.   
  183.        open cname;   
  184.   
  185.        fetch cname into rname;   
  186.   
  187.        return rname;   
  188.   
  189. end;   
  190.   
  191. --正确函数   
  192.   
  193. create or replace function f7   
  194.   
  195. (n in number)   
  196.   
  197. return number   
  198.   
  199. is  
  200.   
  201. begin  
  202.   
  203.        return n*n;   
  204.   
  205. end f7;   
  206.   
  207. ------------------------------------------   
  208.   
  209. --过程   
  210.   
  211. create or replace procedure p1   
  212.   
  213. is  
  214.   
  215. begin  
  216.   
  217.       dbms_output.put_line('First Procuder');   
  218.   
  219. end p1;   
  220.   
  221. --调用过程用call不会出错   
  222.   
  223. call p1();   
  224.   
  225. --这种方法调用过程不正确   
  226.   
  227. begin  
  228.   
  229.      dbms_output.put_line(p1());   
  230.   
  231. end;   
  232.   
  233. ----------注意函数与过程的调用的不同处----------   
  234.   
  235. ------------------------------------------------   
  236.   
  237. --错误过程   
  238.   
  239. create or replace procedure p3   
  240.   
  241. (ttid in Integer)   
  242.   
  243. is  
  244.   
  245.        rname varchar;   
  246.   
  247.        cursor cname   
  248.   
  249.        is    
  250.   
  251.        select tname from test where tid=ttid;   
  252.   
  253. begin  
  254.   
  255.        open cname;   
  256.   
  257.        fetch cname into rname;   
  258.   
  259.        dbms_output.put_line(rname);   
  260.   
  261. end;   
  262.   
  263. --正确过程   
  264.   
  265. create or replace procedure p3   
  266.   
  267. (ttid in Integer)   
  268.   
  269. is  
  270.   
  271.        rname varchar(50);   
  272.   
  273.        cursor cname   
  274.   
  275.        is    
  276.   
  277.        select tname from test where tid=ttid;   
  278.   
  279. begin  
  280.   
  281.        open cname;   
  282.   
  283.        fetch cname into rname;   
  284.   
  285.        dbms_output.put_line(rname);   
  286.   
  287. end;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值