对名称中包含数字的表执行立即命令



我的包中有一个execute immediate,当v_object_name类似于20200823_AGL时,我会得到以下错误:

ORA-00903:无效的表名

如何修复它?

EXECUTE IMMEDIATE 'SELECT MAX(LAST_UPDATE),COUNT(*) FROM ' || v_object_name || ''
INTO v_max_update_date,
v_count;

来自Oracle文档:模式对象名称和限定符

未引用的标识符必须以数据库字符集中的字母字符开头。带引号的标识符可以以任何字符开头。

EXECUTE IMMEDIATE 'SELECT MAX(LAST_UPDATE),COUNT(*) FROM "' || v_object_name || '"'
INTO v_max_update_date,
v_count;

一个更完整的例子:

declare
v_object_name char(12) := '20200823_AGL';
v_count pls_integer;
begin
execute immediate 'select count(*) from "' || v_object_name || '"'
into v_count;
--
DBMS_OUTPUT.PUT_LINE('v_count = ' || v_count);
end;

这样的对象可能是使用双引号创建的。

create view "1_test_view" as select 1 col_name from dual; --> ORA-00999: invalid view name
create view "1_test_view" as select 1 col_name from dual: --> works fine

表格的规则相同

在这种情况下,您需要使用双引号以及从这些对象进行查询

select * from 1_test_view; --> ORA-00903: Invalid table name
select * from "1_test_view"; --> will work fine

相关内容

  • 没有找到相关文章

最新更新