Pau*_*aul 4 sql oracle alter-table
我正在尝试在Oracle中编写一个命令,根据它是否已经存在,将对ADD或MODIFY列进行枯萎.基本上是这样的:
BEGIN
ALTER TABLE MY_TABLE ADD ( COL_NAME VARCHAR2(100 );
EXCEPTION WHEN OTHERS THEN
ALTER TABLE MY_TABLE MODIFY ( COL_NAME VARCHAR2(100) );
END;
Run Code Online (Sandbox Code Playgroud)
但是,Oracle抱怨在BEGIN中有ALTER命令.有没有办法在Oracle中使用单个SQL命令实现此目的?
谢谢!
为了将DDL放在PL/SQL块中,您需要使用动态SQL.
就个人而言,我会先检查列是否存在,然后再发出DDL.就像是
DECLARE
l_cnt INTEGER;
BEGIN
SELECT COUNT(*)
INTO l_cnt
FROM dba_tab_cols
WHERE table_name = 'MY_TABLE'
AND owner = <<owner of table>>
AND column_name = 'COL_NAME';
IF( l_cnt = 0 )
THEN
EXECUTE IMMEDIATE 'ALTER TABLE my_table ADD( col_name VARCHAR2(100) )';
ELSE
EXECUTE IMMEDIATE 'ALTER TABLE my_table MODIFY( col_name VARCHAR2(100) )';
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
如果您无权访问DBA_TAB_COLS,您还可以使用ALL_TAB_COLS或USER_TAB_COLS取决于表所在的架构以及您对表具有的权限.