CREATE OR REPLACE PROCEDURE p_create_dynamic_table IS
v_qry_str VARCHAR2 (100);
v_data_type VARCHAR2 (30);
BEGIN
SELECT data_type || '(' || data_length || ')'
INTO v_data_type
FROM all_tab_columns
WHERE table_name = 'TEST1' AND column_name = 'ZIP';
FOR sql_stmt IN (SELECT * FROM test1 WHERE zip IS NOT NULL)
LOOP
IF v_qry_str IS NOT NULL THEN
v_qry_str := v_qry_str || ',' || 'zip_' || sql_stmt.zip || ' ' ||v_data_type;
ELSE
v_qry_str := 'zip_' || sql_stmt.zip || ' ' || v_data_type;
END IF;
END LOOP;
IF v_qry_str IS NOT NULL THEN
v_qry_str := 'create table test2 (' || v_qry_str || ')';
END IF;
EXECUTE IMMEDIATE v_qry_str;
COMMIT;
END p_create_dynamic_table;
有沒有更好的方法來做到這一點?如何使用PL/SQL過程動態創建動態數據類型表
試着解釋你爲什麼需要這個程序的原因。無論如何,提交併不需要,因爲DDL不是事務性的。 – FerranB 2010-03-25 23:20:40
我99%相信你對這一切都是錯誤的。我的猜測是,你應該做更像這樣的事情,你將zip存儲爲值而不是列名。 CREATE TABLE test2( zip VARCHAR(10)PRIMARY KEY, value VARCHAR(30)) – 2010-03-26 07:05:14