oracle - 过程创建时出现编译错误 PL/SQL: ORA-00947: not enough values
问题描述
create or replace procedure numOfSupplier(X IN NUMBER)IS
OUTPUT VARCHAR2(300);
BEGIN
SELECT R_NAME, N_NAME, COUNT(S_NATIONKEY)
into output
FROM SUPPLIER join NATION on S_NATIONKEY = N_NATIONKEY
join REGION on N_REGIONKEY = R_REGIONKEY
GROUP BY R_NAME, N_NAME
HAVING COUNT (S_NATIONKEY) > X;
dbms_output.put_line( OUTPUT );
END numOfSupplier;
/
我正在尝试创建一个程序,其中我指定一个数字,例如 130,它将列出地区名称、国家名称以及该国家超过 130 的供应商数量。我的预期输出是例如
R_NAME N_Name COUNT(S_NATIONEKY)
亚洲 印度尼西亚 131
亚洲 中国 132
但是,当我运行我的脚本时,它返回 PL/SQL: ORA-00947: not enough values。我不确定为什么会这样。我已经单独运行了我的 select 语句,它工作正常,但是当我把它变成一个程序时它不起作用。那里的任何人都可以帮我确定问题出在哪里。
解决方案
另一种方法是连接到一个字符串,这样你就得到了一个 R_NAME、N_NAME 和 COUNT 的连接字符串数组。
修改程序如下,
create or replace procedure numOfSupplier(X IN NUMBER)IS
TYPE type_supplier is table of varchar2(200) Index by binary_integer;
tab_supplier type_supplier;
counter NUMBER(10):=0;
BEGIN
--Cursor to loop through the records returned
for cur_suppliers in
(SELECT R_NAME||' '|| N_NAME||' '|| COUNT(S_NATIONKEY) output
FROM SUPPLIER join NATION on S_NATIONKEY = N_NATIONKEY
join REGION on N_REGIONKEY = R_REGIONKEY
GROUP BY R_NAME, N_NAME
HAVING COUNT (S_NATIONKEY) > X)
LOOP
counter := counter + 1;
--Load the data to array indexed by integer
tab_supplier(counter) := cur_suppliers.output;
END LOOP;
--Loop through the array and print the array
FOR i IN tab_supplier.FIRST..tab_supplier.LAST LOOP
Dbms_output.put_line ('Values are : ' ||tab_supplier(i));
END LOOP;
END numOfSupplier;
/
在匿名块中运行该过程应该返回,
EXEC numOfSupplier;
Values are : ASIA INDONESIA 131
Values are : EUROPE UK 121
Values are : ASIA INDIA 111
推荐阅读
- vb.net - 附加到 Datagridview 的 CheckBox 被自动选中
- php - 集成 Mercadopago Checkoutpro 时遇到问题
- python - 如何使用 Python 3 循环导入
- c# - WPF动态添加样式触发器
- sql - 如果没有数据,则根据两个表中的两列的值选择一个新列,如果没有数据,则为 null
- amazon-web-services - Amazon S3 存储数百万个文件
- linkedin - LinkedIn 分享文章引发了一些错误异常
- redux - 使用 createSlice reduxtoolkit 进行重构
- google-apps-script - 如何通过脚本检索 Google 表格的最后一行(无论是否为空)?
- python - PyTorch 1D CNN 问题