我在看视频教学时跟着敲了一段过程如下:DECLARE
                                        sql VARCHAR2(100);
                                        id VARCHAR2(10):='0002'
                                        name VARCHAR2(10);
                                        BEGIN
        sql:='SELECT pname FROM pd WHERE pid=:1';
        execute immediate SQL into USING id;
       DBMS_OUTPUT.put_line(name);
       END;
输出报了:      ORA-06550: 第 3 行, 第 1 列: 
                PLS-00103: 出现符号 "SQL"在需要下列之一时:
                begin function package
                pragma procedure subtype type use <an identifier>
                <a double-quoted delimited-identifier> form current cursor
                符号 "begin在 "SQL" 继续之前已插入。
                ORA-06550: 第 4 行, 第 4 列: 
                PLS-00103: 出现符号 "VARCHAR2"在需要下列之一时:
                := . ( @ % ;
                符号 ":=" 被替换为 "VARCHAR2" 后继续。
                ORA-06550: 第 4 行, 第 16 列: 
                PLS-00103: 出现符号 "="在需要下列之一时:
                . ( * % & = - + ; < / > at in
                is mod not rem <an exponent (**)> <> or != or ~= >= <= <> and
                or like between ||

解决方案 »

  1.   

    sql:='SELECT pname FROM pd WHERE pid=:1';
    1前面的冒号要写在等号的前面。
      

  2.   

    pid = 1,不需要冒号,呵呵。
      

  3.   

    编译通过代码请参考:CREATE OR REPLACE PROCEDURE TestProcedure IS
        mySQL VARCHAR2(100);
        id VARCHAR2(10) := '0002';
        NAME VARCHAR2(10);    
    BEGIN
        mySQL:= 'SELECT first_name from employees where employee_id = 1';
        EXECUTE IMMEDIATE mySQL INTO  id;
        DBMS_OUTPUT.PUT_LINE(NAME);
    END TestProcedure;
      

  4.   

    execute immediate SQL into USING id;
    这里改成
    execute immediate SQL into name USING id;
      

  5.   

    冒号是绑定变量
    DECLARE
      sql VARCHAR2(100);
      id VARCHAR2(10):='0002'
      name VARCHAR2(10);
      BEGIN
      sql:='SELECT pname FROM pd WHERE pid=:1';
      execute immediate SQL name into USING id;
      DBMS_OUTPUT.put_line(name);
      END;
      

  6.   

    DECLARE
      s  VARCHAR2(100);
      id VARCHAR2(10):='0002';
      name VARCHAR2(10);
      BEGIN
      s:='SELECT 11 FROM dual';
      execute immediate s  into  name ;
      DBMS_OUTPUT.put_line(name);
      END;
      

  7.   

    id VARCHAR2(10):='0002'这里少个分号。