Create or replace procedure p1(
name in varchar2
)
Is
Details1 emp%rowtype;
Details2 dept%rowtype;
Begin
If name in (select ename from emp)
Then
Select * into details1 from emp
where ename=name;
dbms_output.put_line(details1.deptno||'
'||details1.ename);
End if;
If name in (select dname from dept)
Then
Select * into details2 from dept
where dname=name;
dbms_output.put_line(details2.deptno||'
'||details2.dname);
End if;
End;
如果我这样称呼它:
Exec p1('BLAKE')
我想要输出:
Deptno Ename
----------- ------------
20 BLAKE
如果我这样称呼它:
Exec p1('Sales')
我想要输出:
Deptno Dname
----------- ------------
30 SALES
在我的程序中,我接受参数变量,如果该变量存在于我的表列中,则通过在该变量上传递任何名称,然后我要从该表中获取数据。
我举一个例子: 当我们在Google中编写ronaldo时,足球桌上会提供有关ronaldo的信息(假设足球是桌子,而足球桌上则存在ronaldo)。 当我们在Google中编写奥巴马时,有一个信息提供了来自美国总统表的奥巴马的信息....如果我们写任何名称并且该名称存在于任何表列中,那么我希望从该表中获取数据。
答案 0 :(得分:1)
就像别人所说的那样,很难理解您想要的内容,但是我相信您想要的是以下内容,完全未经测试的代码,因此可能会有一些语法错误,但至少给您提供了另一种思路。
Create or replace procedure p1(name in varchar2) Is
V_name varchar2(1000) default null;
v_dept varchar2(100) default null;
Begin
begin
select ename, deptno
into v_name, v_dept
from emp
where upper(trim(name)) = upper(trim(v_name));
exception
when no_data_found then
v_name = null;
v_dept = null;
when to_many_rows then
-- handle this however you need
end;
If v_name is not null then
dbms_output.put_line(v_deptno||' '||v_name);
else
begin
select dname, deptno
into v_name, v_dept
from dept
where upper(trim(name)) = upper(trim(v_name));
exception
when no_data_found then
v_name = null;
v_dept = null;
when to_many_rows then
-- handle this however you need
end;
If v_name is not null then
dbms_output.put_line(v_dept||' '||v_name);
End if;
end if;
End;
答案 1 :(得分:1)
与您所描述的最接近的是:
一条SQL语句,带有一个绑定变量:name。从EMP和DEPT中选择;输出一列,其中包含部门编号,名称(甚至不需要使用,因为在所有情况下都将其用作输入值),以及附加的列“ type”以显示名称是在EMP中还是在EMP中找到部门如果您随后必须由此创建一个过程,那么这部分就不重要了。
select deptno, ename as name, 'EMPL' as classif
from emp
where ename = :name
union all
select deptno, dname, 'DEPT'
from dept
where dname = :name
;