创建插入雇员的存储过程INSERT_EMP,并将雇员编号等作为参数。
CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 1000)
BEGIN
  insert into emp(ENAME,SAL) values(P_EMPNO,V_SAL) ;
DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO|'已插入到表中');
   COMMIT;
EXCEPTION
 WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
  ROLLBACK;
END;
程序提示:
警告: 创建的过程带有编译错误。

解决方案 »

  1.   

    请问我的代码错在哪里?插入之前是不是要先判断有些省略的值的不能为null,emp的表如下select * from emp;
         EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 17-12月-80            800                    20
          7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30
          7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30
          7566 JONES      MANAGER         7839 02-4月 -81           2975                    20
          7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
          7698 BLAKE      MANAGER         7839 01-5月 -81           2850                    30
          7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10
          7788 SCOTT      ANALYST         7566 24-1月 -87           3090                    20
          7839 KING       PRESIDENT            17-11月-81           5000                    10
          7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
          7876 ADAMS      CLERK           7788 02-4月 -87           1100                    20
          7900 JAMES      CLERK           7698 03-12月-81            950                    30
          7902 FORD       ANALYST         7566 03-12月-81           3000                    20
          7934 MILLER     CLERK           7782 23-1月 -82           1300                    10已选择14行。
      

  2.   


    CREATE OR REPLACE PROCEDURE
    INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL IN NUMBER DEFAULT 1000)
    as--错误1 你少了as
    BEGIN
      insert into emp(EMPNO,SAL) values (P_EMPNO,V_SAL);
      DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO||'已插入到表中');
    --错误2 你的P_EMPNO|'已插入到表中' 少了|
      COMMIT;
      EXCEPTION
      WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;
      

  3.   


    CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 1000)
    IS --少了is or as
    BEGIN
      insert into emp(ENAME,SAL) values(P_EMPNO,V_SAL) ;
      DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO||'已插入到表中');  --这里少了一个| Oracle中的连接号是||
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;EXEC INSERT_EMP;13  PL/SQL block, executed in 0.078 sec.
        发生错误,插入失败!                
        Total execution time 0.078 sec.     
      

  4.   

    CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 1000)
    as---or is 少了这个
    BEGIN
      insert into emp(ENAME,SAL) values(P_EMPNO,V_SAL) ;
    DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO|'已插入到表中');
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;
      

  5.   

    CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 1000)
    as---or is 少了这个
    BEGIN
      insert into emp(ENAME,SAL) values(P_EMPNO,V_SAL) ;
    DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO||'已插入到表中'); --抒写的时候漏了吧
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;
      

  6.   


    CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 100)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 1000)
    IS 
    BEGIN
      insert into emp(ENPNO,SAL) values(P_EMPNO,V_SAL) ;
      DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO||'已插入到表中');
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;--EXEC INSERT_EMP;
    警告: 创建的过程带有编译错误。
      

  7.   


    警告: 创建的过程带有编译错误。PROCEDURE INSERT_EMP 出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    1/2158   PLS-00103: 出现符号 "CREATE"在需要下列之一时:
             ; is with authid as
             cluster order using external deterministic parallel_enable
             pipelined
      

  8.   


    CREATE OR REPLACE PROCEDURE INSERT_EMP(P_EMPNO IN NUMBER DEFAULT 7788,V_SAL NUMBER DEFAULT 100)
    IS 
    BEGIN
      insert into emp(EMPNO,SAL) values(P_EMPNO,V_SAL) ;
      DBMS_OUTPUT.PUT_LINE('雇员'||P_EMPNO||'已插入到表中');
      COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生错误,插入失败!');
      ROLLBACK;
    END;你原来代码中is后面还有一行代码。