我想创建一个表并在运行时使用动态sql在同一表中插入一行

我创建了一个过程,该过程接受表名,2个列名和2个需要在创建表上插入的值。

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”的错误:缺少SELECT关键字 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;
/

有人帮助我。

wslqfm 回答:我想创建一个表并在运行时使用动态sql在同一表中插入一行

您可以在values

之前添加空格
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;
/
本文链接:https://www.f2er.com/3144479.html

大家都在问