我现在对这个测验有点痴迷,似乎我找不到出路......呵呵。
让我们看看 - 我们有两个表:
id, salary, bonus
)id, name, surname
)问题是,创建一个程序,使其显示演员的salary, bonus, name, surname
,另外还有他的最终薪水=(bonus + salary
)。
首先我尝试了这个:(只是为了显示salary, bonus, name, surname
而不是总薪水,但它失败的时间很长。)
create or replace procedure show_things AS
BEGIN
Select a.id, a.salary, a.bonus
From actor a
where a.id in
(select i_id, i.name, i.surname
from info i
where i_id = a_id);
END;
我的意思是,是否可以使用程序显示内容?我真的无法理解这个问题。
答案 0 :(得分:0)
我真的不知道您正在使用哪个版本的SQL,但实质上,您将要加入两个表并从中查询,如下所示:
SELECT
actor.salary,
actor.bonus,
info.name,
info.surname,
actor.salary + actor.bonus AS total_pay
FROM actor INNER JOIN info;
完成: - )
答案 1 :(得分:0)
这是一个简单的连接:
SELECT
a.id,
a.salary,
a.bonus,
i.name,
i.surname,
a.salary + a.bonus AS final_paycheck
FROM
actor a INNER JOIN info i
ON
a.id= i.id
答案 2 :(得分:0)
您的程序不会按原样编译。您(至少)需要定义一些局部变量,并使用INTO
子句来选择它们。
然后,您可以使用dbms_output.put_line()
输出您的程序结果,假设您已SERVEROUTPUT
开启。
此外,您不能将IN
运算符与其引用的子查询(3)中的列数(1)不同。您应该使用其他人建议的简单JOIN
。
请参阅PL/SQL documentation中的示例。
答案 3 :(得分:0)
您可以使用pipepline函数来实现此目的。
-- drop type t_actor_tab;
-- drop type t_actor_obj;
-- drop function get_actor_ptf;
-- drop table ACTOR;
-- drop table info;
CREATE TABLE ACTOR(ID NUMBER, SAL NUMBER, BONUS NUMBER);
INSERT INTO ACTOR(ID, SAL, BONUS) VALUES(1, 1200, 120);
INSERT INTO ACTOR(ID, SAL, BONUS) VALUES(2, 1300, 240);
INSERT INTO ACTOR(ID, SAL, BONUS) VALUES(3, 1500, 120);
CREATE TABLE INFO(ID NUMBER, NAME VARCHAR2(30), SURNAME VARCHAR2(30));
INSERT INTO INFO(ID, NAME, SURNAME) VALUES(1, 'ABC', 'abc');
INSERT INTO INFO(ID, NAME, SURNAME) VALUES(2, 'xyz', 'xyz');
INSERT INTO INFO(ID, NAME, SURNAME) VALUES(3, 'MNO', 'mno');
CREATE TYPE t_actor_obj AS OBJECT (
id NUMBER
,sal NUMBER
,bonus NUMBER
,final_paycheck NUMBER
);
CREATE TYPE t_actor_tab IS TABLE OF t_actor_obj;
CREATE OR REPLACE FUNCTION get_actor_ptf
RETURN t_actor_tab PIPELINED AS
CURSOR get_details_cur
IS
SELECT a.id
,a.sal
,a.bonus
,(a.sal+a.bonus) final_paycheck
From actor a
where EXISTS(SELECT 1 FROM info i WHERE i.id = a.id);
v_details_row get_details_cur%ROWTYPE;
BEGIN
OPEN get_details_cur;
LOOP
FETCH get_details_cur INTO v_details_row;
EXIT WHEN get_details_cur%NOTFOUND;
PIPE ROW(t_actor_obj (v_details_row.id,v_details_row.sal,v_details_row.bonus,v_details_row.final_paycheck));
END LOOP;
CLOSE get_details_cur;
RETURN;
END;
/
SELECT * FROM TABLE(get_actor_ptf);
ID SAL BONUS FINAL_PAYCHECK
---------- ---------- ---------- --------------
1 1200 120 1320
2 1300 240 1540
3 1500 120 1620
答案 4 :(得分:-1)
subtitle: {
text: '$2567 mm',
align: 'center',
verticalAlign: 'middle',
y: 0,
useHTML: true
}
CALL SP1()