【问题标题】:How to create new table and insert using function in plsql?如何在plsql中使用函数创建新表和插入?
【发布时间】:2019-06-15 14:50:31
【问题描述】:

我想在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;

【问题讨论】:

  • 那有什么问题呢?只要 col_specs 列有效,这应该可以解决问题。另一个问题:你为什么要这样做?
  • Steven,...TABLE' 这个词后面少了一个空格。同意“为什么?”问题。
  • 我正在学习pl/sql,教练给了我这个问题

标签: oracle plsql


【解决方案1】:

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

然后您的程序将“工作”。它不是一个函数,而是一个过程。另外,这是一个没有附加价值的过程,所以我不明白你为什么要编写它。

最好的问候, 炖阿什顿

【讨论】:

  • 感谢您的反馈。能否请您详细说明如何使用 pl/sql 中的函数创建表和列?
  • 不,我不能,因为你没有说函数应该返回什么。请详细说明你为什么想要一个函数。
【解决方案2】:

您要创建过程还是函数?

您在主题标题中提到了函数,但尝试创建过程(根据您提到的代码)。

如果您不想创建约束和索引,那么您的过程可以不用

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

您必须在“创建表”之后放置空格,这在 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');

【讨论】:

    【解决方案3】:

    你可以试试这个!

    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;
    

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2012-04-16
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多