Oracle procedure with new type parameter giving ORA-00947 Error
我正在处理一个接受大量输入然后返回填充游标的过程。该过程将从 Java 应用程序中调用。是的,这很容易构建为临时查询,但我试图在我的代码中只使用正确的函数/过程调用。
我将传入未知数量的参数。我用这个建议一种新类型的答案解决了这个问题。
但是现在我收到”PL/SQL: ORA-00947: no enough values”错误,我无法找出问题所在。我知道它与 where 子句子查询有关。
1
2 3 4 5 6 7 |
DESC BILINGUAL
Name Null Type ———– ——– ————- KEYFIELD NOT NULL VARCHAR2(16) PURPOSE VARCHAR2(128) CONTENTS_EN NOT NULL VARCHAR2(128) CONTENTS_FR NOT NULL VARCHAR2(128) |
这是一个如何使用和工作的示例。
1
2 3 |
select keyfield, contents_en, contents_fr
from bilingual where keyfield in (‘1111’, ‘1111A’); |
这是我正在编写的程序。
1
2 3 4 5 6 7 8 9 10 11 |
CREATE OR REPLACE TYPE STRING_TABLE AS TABLE OF VARCHAR2(16);
CREATE OR REPLACE PROCEDURE DOCSADM.BILINGUAL_VALUES ( |
一般来说,在 PL/SQL 中,您会使用 OPEN .. FOR SELECT .. 语法而不是 SELECT .. INTO 打开一个引用游标(尽管 SQL 中对 CURSOR () 函数的支持意味着您在技术上都可以做到),例如
1
2 3 4 5 6 7 8 9 10 11 12 13 |
CREATE OR REPLACE PROCEDURE docsadm.bilingual_values (
in_keys string_table, cur OUT SYS_REFCURSOR) AS BEGIN OPEN cur FOR SELECT keyfield, contents_en, contents_fr FROM bilingual WHERE keyfield IN (SELECT COLUMN_VALUE FROM TABLE (in_keys)); END bilingual_values; / |
- 当我使用您的更改时,打开光标而不是选择,问题就消失了。我没想到问题会来自光标,所以我花了很长时间才弄明白。谢谢
来源:https://www.codenong.com/54409894/