M.J*_*.J. 3 sql oracle plsql stored-procedures
我想从一个过程调用create table/alter table命令.可能吗?
我的要求是更改所有表中列的数据类型.所以,我只是从中获取列名user_tab_cols.现在我想创建一个需要create语句的临时表..但是我无法在proc中使用它.
有人可以帮帮我吗?
APC*_*APC 11
我从引用中USER_TAB_COLUMNS推测这是Oracle. ALTER和CREATE语句是DDL,我们不能直接在PL/SQL中执行.但是,有几种方法可以解决这个限制:EXECUTE IMMEDIATE和DBMS_UTILITY.EXEC_DDL().我将EXECUTE IMMEDIATE在以下示例中使用.
begin
for lrec in ( select table_name from user_tab_columns
where column_name = 'UNIVERSAL_COLUMN_NAME')
loop
execute immediate 'alter table '||lrec.table_name||
' modify UNIVERSAL_COLUMN_NAME varchar2(255)';
end loop;
end;
Run Code Online (Sandbox Code Playgroud)
请注意,通常的限制适用:新数据类型必须与现有数据类型兼容(除非列为空),并且使用某些特定类型的数据类型(如CLOB)会更加棘手.
编辑
我没有解决CREATE TABLE语句.原则是相同的,输出时间更长.此外,我不完全清楚它如何适用于您之前更改这些列的数据类型的要求.
| 归档时间: |
|
| 查看次数: |
6057 次 |
| 最近记录: |