现在的位置: 首页 > 综合 > 正文

存储过程使用游标

2017年10月22日 ⁄ 综合 ⁄ 共 2638字 ⁄ 字号 评论关闭

1、存储过程判断对象是否存在并执行DDL:

Sql代码
  1. DECLARE  
  2.   V_COUNT INTEGER := 0;   
  3. BEGIN  
  4.   SELECT COUNT(*)   
  5.     INTO V_COUNT   
  6.     FROM USER_OBJECTS US   
  7.    WHERE US.OBJECT_NAME = 'GET_CHANGE_REC_ID'  
  8.      AND US.OBJECT_TYPE = 'PROCEDURE';   
  9.   IF V_COUNT > 0 THEN  
  10.     EXECUTE IMMEDIATE 'DROP PROCEDURE GET_CHANGE_REC_ID';     
  11.   END IF;   
  12. END;   
  13. /  

 

2、游标试用:

创建数据:

Sql代码
  1. CREATE TABLE TBL_TEST   
  2. (   
  3. U_ID NUMBER(10) PRIMARY KEY,   
  4. U_NAME VARCHAR2(100)   
  5. );   
  6.   
  7. BEGIN  
  8.  FOR I IN 1..20 LOOP   
  9.   INSERT INTO TBL_TEST VALUES(I,'NAME'||I);   
  10.  END LOOP;   
  11.  COMMIT;   
  12. END;   
  13. /  

 

执行命令“SET SERVEROUTPUT ON”,打开输出

以游标的形式进行ID的累加:

Sql代码
  1. DECLARE  
  2.  V_TOTAL INTEGER:=0;   
  3. BEGIN  
  4.  FOR R IN (SELECT * FROM TBL_TEST) LOOP   
  5.   V_TOTAL:=V_TOTAL+R.U_ID;   
  6.  END LOOP;   
  7.  DBMS_OUTPUT.put_line('V_TOTAL:'||V_TOTAL);   
  8. END;   
  9. /  

 

在游标中设定参数:

Sql代码
  1. DECLARE  
  2.   V_TOTAL INTEGER := 0;   
  3.   CURSOR C(V_ID INTEGER := 10) IS SELECT * FROM TBL_TEST WHERE U_ID < V_ID;   
  4. BEGIN  
  5.   FOR R IN C LOOP   
  6.     V_TOTAL := V_TOTAL + R.U_ID;   
  7.   END LOOP;   
  8.   DBMS_OUTPUT.PUT_LINE('V_TOTAL:' || V_TOTAL);   
  9. EXCEPTION   
  10.   WHEN OTHERS THEN  
  11.     IF C%ISOPEN THEN  
  12.       CLOSE C;   
  13.     END IF;   
  14. END;   
  15. /  

  

输入输出参数:

Sql代码
  1. CREATE OR REPLACE PROCEDURE P_TEST(V1 IN INTEGER,   
  2.                                    V2 IN INTEGER,   
  3.                                    S  OUT INTEGERIS  
  4. BEGIN  
  5.   S := V1 + V2;   
  6. END;   
  7. /   
  8.   
  9.   
  10. -- 调用   
  11. DECLARE  
  12.   S INTEGER := 0;   
  13. BEGIN  
  14.   P_TEST(1, 2,S);   
  15.   DBMS_OUTPUT.PUT_LINE('SUM:' || S);   
  16. END;   
  17. /  

 

 只有输入参数:

Sql代码
  1. CREATE OR REPLACE PROCEDURE P_TEST(V1 IN INTEGER, V2 IN INTEGERIS  
  2. BEGIN  
  3.   DBMS_OUTPUT.PUT_LINE('SUM:' || (V1 + V2));   
  4. END;   
  5. /  
Sql代码
  1. EXEC P_TEST(1,2);-- 脚本调用  

 

如果出现编译错误,可以执行“SHOW ERRORS”来查看错误明细

抱歉!评论已关闭.