1.dept(父表) -deptno dname loc
2.emp(子表) -empno ename sal deptno
*显示ename,loc,同时我们使用%rowtype给出empno。
*使用这个plsql程序来实现结果。
DECLARE
v1 emp%rowtype;
v2 dept1%rowtype;
vnum emp.empno%type:='&no';
BEGIN
SELECT A.ename,b.loc
INTO v1,v2
FROM emp A,dept1 b
WHERE A.deptno=b.deptno AND A.empno=vnum;
dbms_output.put_line(v1.ename||'**'||v2.loc);
end;
答案 0 :(得分:0)
如果您选择的所有内容都是单列,为什么要使用rowtype? 您可以使用列类型声明变量。
DECLARE
v1 emp.ename%type;
v2 dept1.loc%type;
vnum emp.empno%type:='&no';
BEGIN
SELECT A.ename,
b.loc
INTO v1,
v2
FROM emp A,
dept1 b
WHERE A.deptno=b.deptno
AND A.empno =vnum;
dbms_output.put_line(v1.ename||'**'||v2.loc);
END;
答案 1 :(得分:0)
我们可以定义一个定制的记录类型,以匹配PL / SQL中特定查询的投影。这样做的一个优点是能够从记录类型定义表类型,这对于获取多个记录很方便。
DECLARE
type v_rec_t is record (
ename emp.ename%type
, loc dept1.loc%type
);
l_rec v_rec_t;
type v_rec_nt is table of v_rec_t;
l_recs v_rec_nt;
BEGIN
SELECT A.ename, b.loc
INTO l_rec
FROM emp A, dept1 b
WHERE A.deptno = b.deptno
AND A.empno = &empno;
dbms_output.put_line(l_rec.ename ||'**'|| l_rec.loc);
-- get multiple rows
SELECT A.ename, b.loc
bulk collect INTO l_recs
FROM emp A
join dept1 b
on A.deptno = b.deptno
where A.deptno = &deptno;
dbms_output.put_line(' emps in dept'|| l_recs.count());
end;
定义显式游标的原因之一是我们可以根据它们的预测定义记录变量:
declare
cursor c_emploc (p_empid emp.empno%type) is
SELECT A.ename, b.loc
FROM emp A, dept1 b
WHERE A.deptno = b.deptno
AND A.empno = p_empid;
r_emploc c_emploc%rowtype;
....