Вы хотите создать процедуру или функцию?
Вы упомянули функцию в заголовке темы, но пытаетесь создать процедуру (в соответствии с указанным вами кодом).
Если вы не хотите создавать ограничения и индексы, ваша процедура в порядке без
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');