ORA-00932: 不一致的数据类型: 预期 - 得到 - ORA-06512:
Posted
技术标签:
【中文标题】ORA-00932: 不一致的数据类型: 预期 - 得到 - ORA-06512:【英文标题】:ORA-00932: inconsistent datatypes: expected - got - ORA-06512: 【发布时间】:2020-01-26 05:01:28 【问题描述】:我写了一个简单的plsql块,编译时执行成功。
declare
begin
EXECUTE IMMEDIATE 'SELECT COLUMN_ID,
COLUMN_NAME || '' '' || DATA_TYPE || DECODE(DATA_TYPE,''ROWID'','''',''DATE'','''',NULLIF(''('' || DECODE(DATA_TYPE,''NUMBER'',DATA_PRECISION||'',''||DATA_SCALE,DATA_LENGTH) || '')'',''(,)'')) AS COLS
FROM ALL_TAB_COLS a WHERE OWNER=USER AND TABLE_NAME=''AQ_EVENT_TABLE''';
end;
/
但是,当我尝试添加隐式光标时,我得到了这个错误:
[Error] Execution (1: 2): ORA-00932: inconsistent datatypes: expected - got -
ORA-06512: at line 4
我的代码是:
declare
vSQLSlctString varchar2(255);
begin
EXECUTE IMMEDIATE 'SELECT COLUMN_ID,
COLUMN_NAME || '' '' || DATA_TYPE || DECODE(DATA_TYPE,''ROWID'','''',''DATE'','''',NULLIF(''('' || DECODE(DATA_TYPE,''NUMBER'',DATA_PRECISION||'',''||DATA_SCALE,DATA_LENGTH) || '')'',''(,)'')) AS COLS
FROM ALL_TAB_COLS a WHERE OWNER=USER AND TABLE_NAME=''AQ_EVENT_TABLE''' INTO vSQLSlctString;
end;
/
【问题讨论】:
只是一个旁注。虽然我看不到动态 SQL 的必要性,但我确实看到了不必要的双引号(使用两个单引号)以便在最终结果中生成一个。从版本 10 开始,Oracle 提供了一种替代机制 q'[...]'。基本上在您的查询中,双引号减少为单引号,四引号('''')减少为('')。请参阅文章quoting string literals。这是一篇较旧的文章,但内容仍然有效。 【参考方案1】:问题:selecet
查询中有多个columns
,但into
子句只有一个变量来保存它们。
解决方案:select clause
中columns
的编号和数据类型* 必须与into clause
中变量的编号和数据类型匹配。
我正在考虑您的查询将返回单个记录,因为如果 select
查询返回多于 1 条记录,则 noraml INTO
将引发错误。
如果您有返回多条记录的查询,那么您必须使用bulk collect into
和一些udt
。
请使用以下块。
declare
vcolid number;
vcoldesc varchar2(4000);
begin
EXECUTE IMMEDIATE 'SELECT COLUMN_ID,
COLUMN_NAME || '' '' || DATA_TYPE || DECODE(DATA_TYPE,''ROWID'','''',''DATE'','''',NULLIF(''('' || DECODE(DATA_TYPE,''NUMBER'',DATA_PRECISION||'',''||DATA_SCALE,DATA_LENGTH) || '')'',''(,)'')) AS COLS
FROM ALL_TAB_COLS a WHERE OWNER=USER AND TABLE_NAME=''AQ_EVENT_TABLE''' INTO vcolid, vcoldesc;
end;
/
现在,您可以在 execute immediate
之后的任何其他逻辑中使用 vcolid
和 vcoldesc
。
干杯!!
【讨论】:
ORA-01422:精确提取返回的行数超过了请求的行数 ORA-06512:在第 5 行 顺便问一下,你为什么使用动态查询?以上是关于ORA-00932: 不一致的数据类型: 预期 - 得到 - ORA-06512:的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB
如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -
ora-00932 不一致的数据类型预期数字得到 char plsql
ORA-00932: 不一致的数据类型: 预期 - 得到 clob 休眠/弹簧启动