create or replace procedure SPinsert(ptable_name1 in  varchar2)
as
begin
  execute immediate 'insert into ' || ptable_name1 || '(id ,name)' || 'values(1,aaa)';
end;
这里的id为number类型的,name为varchar2类型的,怎么让aaa输出时是'aaa'的形式啊,上面的这句怎么才能编译后执行啊

解决方案 »

  1.   

    TRY TO UNDERSTAND IT ..
    CREATE OR REPLACE PROCEDURE SP_TEST_XF(PTABLE_NAME IN VARCHAR2) IS
      V_SQL VARCHAR2(100) := '';
    BEGIN
      V_SQL := 'INSERT INTO '||PTABLE_NAME||'(ID,NAME) VALUES(1,''aaa'')';
      DBMS_OUTPUT.PUT_LINE('V_SQL_1: '||V_SQL);
      
      V_SQL := 'INSERT INTO '||PTABLE_NAME||'(ID,NAME) VALUES(1,aaa)';
      DBMS_OUTPUT.PUT_LINE('V_SQL_2: '||V_SQL);
      
    END;
    SQL> SET SERVEROUTPUT ON
    SQL> EXEC SP_TEST_XF('MY_TABLE_NAME');V_SQL_1: INSERT INTO MY_TABLE_NAME(ID,NAME) VALUES(1,'aaa')
    V_SQL_2: INSERT INTO MY_TABLE_NAME(ID,NAME) VALUES(1,aaa)PL/SQL procedure successfully completedSQL> 
      

  2.   

    execute immediate 'insert into ' || ptable_name1 || '(id ,name)' || 'values(1,!'aaa'!)';
    10g里用!!可以使中间的'不用转义