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