如何从不同的表plsql中获取多个值

时间:2015-03-12 21:32:57

标签: oracle plsql

我通常每天都会进行此查询:

select * from table1
where name = 'PAUL';

select * from table2
where id_user = 012345;

select * from table25
where name = 'PAUL';

select * from table99
where name = 'PAUL';

select * from table28
where id_user = 012345;
.
.
.

我每天都会这样查询。今天是15个表,明天可能是20个,唯一的变化是要搜索的用户的名称或ID。我必须在每个查询中放置用户名或ID,所以我需要一个查询,其中有一个变量并分配名称和ID。     。     。 有一种方法可以简化此查询并使其更好吗?如:

DECLARE
l_name  table1.name %type;
l_id_user table28.id_user %type;
BEGIN
l_id_user := 012345;
l_name := 'PAUL';

select * from table1
where name in ('l_name');

select * from table2
where id_user in (l_id_user);
.
.
.

END;

我试过这种方式却失败了。我需要这个查询,因为在大多数情况下需要查看多达20个表或更多。

1 个答案:

答案 0 :(得分:1)

如果您想要的是在SQL * Plus中重复运行一系列select语句的简单方法 - 但是根据不同的标准,您可以这样做:

ACCEPT l_name PROMPT "Input user name: "
ACCEPT l_id_user PROMPT "Input user id: "

select * from table1
where name = '&l_name';

select * from table2
where id_user = &l_id_user;

select * from table25
where name = '&l_name';

select * from table99
where name = '&l_name';

select * from table28
where id_user = &l_id_user;

在pl / sql块declare ... begin .. end;中,select语句的行为与在SQL * Plus中独立运行时的行为不同:

  • 他们不会自动打印输出。
  • 你必须使用例如FOR LOOP语法的SELECT INTO或变体,用于捕获后续处理的结果。你应该找一些关于pl / sql编程的文档。

你应该明白pl / sql绝对不是为屏幕输出而设计的。

可以使用dbms_output.put_line打印出字符串值,但您可以完全依靠将一行值格式化为合适的字符串。

如果您的结果包含多个列,则屏幕输出的格式变得非常麻烦,因为您没有像Java String.format()这样的格式化实用程序来帮助您。

如果你的结果包含多行,你必须提供某种循环结构,允许你打印出各行。

Conlusion:

这些是pl / sql的缺点 - 我真的没有任何好处 - 除非您的目标是对正在读取的数据应用一些逻辑,而不是仅将其打印到屏幕或文件。