我想创建一个 table 并在 运行 期间使用动态 sql 在同一 table 中插入一行

I want to create a table and insert a row in same table during run time using dynamic sql

我创建了一个过程,它接受 table 名称、2 个列名称和 2 个需要在创建 table 时插入的值。

create or replace procedure SP_TABLE(P_TAB IN VARCHAR2,P_COL_1 IN VARCHAR2,P_COL_2 VARCHAR2,P_ID IN NUMBER,P_NAME IN VARCHAR2)
AS
v_sql varchar2(2000);
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE '||P_TAB||' ('||P_COL_1||' NUMBER, '||P_COL_2 ||' VARCHAR2(20))';
v_sql := 'insert into ' ||P_TAB||'values (:1,:2)'; 
EXECUTE IMMEDIATE v_sql USING P_ID,P_NAME;
END;
/

程序创建成功,没有任何错误。然而,当我 运行 下面的脚本时,我得到了类似 'ORA-00928: missing SELECT keyword ORA-06512: 在 "SQL_PXADYXDREZPVPJSALLEGOZJOB.SP_TABLE",第 7 行。

DECLARE
V_TAB VARCHAR2(20) := 'TABLE1';
V_COL1 VARCHAR2(20) := 'ID';
V_COL2 VARCHAR2(20) := 'NAME';
V_ID NUMBER := 1;
V_NAME VARCHAR2(20):= 'RAJA';
BEGIN
SP_TABLE(V_TAB,V_COL1,V_COL2,V_ID,V_NAME);
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_STACK);
END;
/

有人帮我解决这个问题。

可以在values

前加上space
create or replace procedure SP_TABLE(P_TAB IN VARCHAR2,P_COL_1 IN VARCHAR2,P_COL_2 VARCHAR2,P_ID IN NUMBER,P_NAME IN VARCHAR2)
AS
v_sql varchar2(2000);
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE '||P_TAB||' ('||P_COL_1||' NUMBER, '||P_COL_2 ||' VARCHAR2(20))';
v_sql := 'insert into ' ||P_TAB||' values (:1,:2)'; 
EXECUTE IMMEDIATE v_sql USING P_ID,P_NAME;
END;
/