Oracle 19c触发器查询user_tab_columns无返回结果问题求助
Oracle 19c触发器查询user_tab_columns无返回的解决方法
- 核心原因:Oracle对未加双引号的标识符默认会转换为全大写存储到数据字典中,你查询条件中写的
table_name = 'tb_test'使用小写表名,无法匹配数据字典中实际存储的TB_TEST记录,因此查询无结果。 - 代码笔误:游标定义的SQL语句中将关键字
from错写为form,且语句末尾缺少分号,若为实际运行代码会触发编译错误,可检查是否为输入时手误。
修正后触发器代码
create or replace trigger mySche1.AUT_tb_test after update on mySche1.tb_test for each row declare cursor vco_col_nm is select column_name from user_tab_columns where table_name = 'TB_TEST'; -- 修正为全大写表名,修正关键字、补充分号 colList varchar2(2048); begin for colNm in vco_col_nm loop colList := colList || colNm.column_name || ','; end loop; mySche1.pack1.proc1 (colList); end; /
如果你建表时特意用双引号指定了小写表名(如
create table mysche1."tb_test"),才需要在查询条件中保留小写表名。Oracle不推荐使用大小写混合的带引号标识符,会大幅提高后续数据字典查询的匹配成本。
若需要避免大小写差异导致的匹配问题,也可以将查询条件改写为where UPPER(table_name) = 'TB_TEST'做模糊匹配。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

