小弟今天在ORACLE 11G中創建了一個內建存儲過程,代碼如下:
1  DECLARE
2  MY_COUNT NUMBER;
3  MY_SUM NUMBER;
4  PROCEDURE MY_PROC (
5  V_NUM SCOTT.EMP.DEPTNO%TYPE,
6  V_SUM OUT NUMBER,
7  V_COUNT OUT NUMBER)
8  AS
9  BEGIN
10 SELECT SUM(SAL),COUNT(*) INTO V_SUM,V_COUNT FROM SCOTT.EMP WHERE DEPTNO=V_NUM;
11 EXCEPTION
12 WHEN NO_DATA_FOUND THEN
13 DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
14 WHEN OTHERS THEN
15 DBMS_OUTPUT.PUT_LINE(SQLCODE||'===='||SQLERRM);
16 END MY_PROC;
/
但進行編譯的時候出現了錯誤,錯誤如下:
ORA-06550:第16行,第12列:
PLS-00103:出現符號"end-of-file"在需要下列之一時:
begin
function progma procedure

解决方案 »

  1.   

     create or replace PROCEDURE MY_PROC (
    V_NUM SCOTT.EMP.DEPTNO%TYPE,
     V_SUM OUT NUMBER,
    V_COUNT OUT NUMBER)
    AS
     MY_COUNT NUMBER;
    MY_SUM NUMBER;
    BEGIN
    SELECT SUM(SAL),COUNT(*) INTO V_SUM,V_COUNT FROM SCOTT.EMP WHERE DEPTNO=V_NUM;
     EXCEPTION
     WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
     WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE(SQLCODE||'===='||SQLERRM);
    END MY_PROC;
     
      

  2.   

    #1楼大哥所寫的方法我知道,但我是創建內建存儲過程,在PL/SQL程序中還可以在塊內建立本地函數和過程,這些過程不存在數據庫中,但可以在創建它們的PL/SQL中反復利用,其語法相同,但不能使用create or replace
      

  3.   

    少一对begin  end
    你上面的begin end是过程的
    而匿名块没有begin...end
      

  4.   

    请参考:DECLARE 
        MY_COUNT NUMBER;
        MY_SUM NUMBER;
        PROCEDURE MY_PROC (V_NUM SCOTT.EMP.DEPTNO%TYPE, 
                                                V_SUM OUT NUMBER,
                                                V_COUNT OUT NUMBER)
        AS
        BEGIN
            SELECT SUM(SAL),COUNT(*) INTO V_SUM,V_COUNT FROM SCOTT.EMP WHERE DEPTNO=V_NUM;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');
            WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE(SQLCODE||'===='||SQLERRM);
        END MY_PROC;
    BEGIN
        ....其它代码
    END;   以前写的子程序的代码: