Как создать новую таблицу и вставить с помощью функции в plsql? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу создать функцию в plsql для динамического создания таблицы

   Create or replace procedure p_dynamic_table (p_table varchar2, 
    col_specs varchar2)
    as
    sql_stmt varchar2 (2000);
    begin
       sql_stmt := 'CREATE TABLE' || p_table || '(' || col_specs || ')';
      EXECUTE IMMEDIATE sql_stmt;
    end;

Ответы [ 3 ]

3 голосов
/ 14 июня 2019

Поставьте пробел после TABLE и перед конечной одинарной кавычкой.

Тогда ваша процедура будет «работать». Это будет не функция, а процедура. Кроме того, эта процедура не имеет дополнительной ценности, поэтому я не понимаю, почему вы хотите ее кодировать.

С уважением, Рагу Эштон

0 голосов
/ 15 июня 2019

Вы хотите создать процедуру или функцию?

Вы упомянули функцию в заголовке темы, но пытаетесь создать процедуру (в соответствии с указанным вами кодом).

Если вы не хотите создавать ограничения и индексы, ваша процедура в порядке без

SQL_STMT: = 'CREATE TABLE' || P_TABLE || '(' || COL_SPECS || ')';

вы должны поставить SPACE после 'CREATE TABLE', который уже упоминался в ответе Stew Ashton.

Согласно тому, что я понял, я пытался упомянуть решение ниже.

PROCEDURE

    CREATE OR REPLACE PROCEDURE P_DYNAMIC_TABLE (P_TABLE      VARCHAR2,
                                                 COL_SPECS    VARCHAR2)
    AS
       SQL_STMT   VARCHAR2 (2000);
    BEGIN
       SQL_STMT := 'CREATE TABLE ' || P_TABLE || '(' || COL_SPECS || ')';

       EXECUTE IMMEDIATE SQL_STMT;
    END P_DYNAMIC_TABLE;

Выполнить процедуру

    EXEC P_DYNAMIC_TABLE('TEST_TBL','COLUMN_1 NUMBER , COLUMN_2 VARCHAR2(100), COLUMN_3 DATE');
0 голосов
/ 14 июня 2019

Вы можете попробовать это!

create or replace procedure f2
is
begin
execute immediate 'create table &nds_ddl(&c1 &datatype)';
end;

Затем выполните процедуру f2, т.е.

exec f2;


Select * from table_name_you_entered;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...