這是代碼:
create type emp_high_sal_ot is object
(
full_name varchar2(64),
phone_number varchar(20),
salary number(10,2)
);
create type emp_high_sal_nt is table of emp_high_sal_ot;
并且以下函式無法編譯:
create or replace function get_highest_paid_emps return emp_high_sal_nt
AS
rec emp_high_sal_nt;
avg_sal NUMBER;
begin
SELECT AVG(salary)
INTO avg_sal
FROM employees;
SELECT last_name || ' ' || first_name, phone_number, salary
INTO rec
FROM employees
WHERE salary > avg_sal;
return rec;
end;
它說:
PL/SQL: ORA-00947: 沒有足夠的值
這是為什么?
uj5u.com熱心網友回復:
這是為什么?
您正在嘗試將 3 個值(和多行)放入一個變數中。
使用BULK COLLECT INTO并包裝物件型別中的值:
create or replace function get_highest_paid_emps return emp_high_sal_nt
AS
rec emp_high_sal_nt;
avg_sal NUMBER;
begin
SELECT AVG(salary)
INTO avg_sal
FROM employees;
SELECT emp_high_sal_ot(
last_name || ' ' || first_name,
phone_number,
salary
)
BULK COLLECT INTO rec
FROM employees
WHERE salary > avg_sal;
return rec;
end;
/
鑒于樣本資料:
CREATE TABLE employees (first_name, last_name, phone_number, salary) AS
SELECT 'Alice', 'Abbot', '0123456', 100000 FROM DUAL UNION ALL
SELECT 'Betty', 'Baron', '1111111', 250000 FROM DUAL UNION ALL
SELECT 'Carol', 'Chris', '9876543', 300000 FROM DUAL;
然后:
SELECT * FROM TABLE(get_highest_paid_emps());
輸出:
全名 電話號碼 薪水 貝蒂男爵 1111111 250000 克里斯·卡羅爾 9876543 300000
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371570.html
上一篇:查找子項的頂級父項,多個級別
下一篇:拆分表的列值并跳過一些單詞
