如何在plsql中创建新表并使用函数插入?

时间:2019-06-14 09:53:02

标签: oracle plsql

我想在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 个答案:

答案 0 :(得分:3)

在TABLE之后和结尾的单引号之前放置一个空格。

然后您的过程将“运行”。它不是功能,而是过程。另外,此过程没有附加值,因此我不明白您为什么要对其进行编码。

最好的问候, 炖阿什顿

答案 1 :(得分:0)

您要创建过程或函数吗?

您在Topics标头中提到了Function,但是尝试创建Procedure(根据您提到的代码)。

如果您不想创建约束和索引,那么无需使用程序就可以了

  

SQL_STMT:='创建表'|| P_TABLE || '('|| COL_SPECS ||')';

您必须在“ CREATE TABLE”(创建表)之后放置空格,这在Stew Ashton的回答中已经提到。

根据我的理解,我尝试在下面提及解决方案。

过程

    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');

答案 2 :(得分:-1)

您可以尝试!

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;