Я хочу создать таблицу и вставить строку в той же таблице во время выполнения с использованием динамического SQL - PullRequest
0 голосов
/ 07 ноября 2019

Я создал процедуру, которая принимает имя таблицы, 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;
/

кто-нибудь, помогите мне с этим.

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете добавить пробел до 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;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...