gpt4 book ai didi

sql - 在 Oracle 中更改表时捕获异常

转载 作者:行者123 更新时间:2023-12-04 09:41:41 24 4
gpt4 key购买 nike

我正在尝试在 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;

然而,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;

如果您无权访问 DBA_TAB_COLS ,您也可以使用 ALL_TAB_COLSUSER_TAB_COLS取决于表所在的架构以及您对表的权限。

关于sql - 在 Oracle 中更改表时捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9115677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com