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

how to get multiple values from different tables 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 个表或更多。

如果您想要的是一种在 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 LOOPSELECT INTO 语法的变体来捕获结果以供后续处理。您应该寻找一些关于 pl/sql 编程的文档。

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

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

如果您的结果包含多个列,则屏幕输出的格式设置会变得非常麻烦,因为您没有任何格式设置实用程序,例如 java String.format() 来帮助您。

如果您的结果包含不止一行,您必须提供某种循环结构,以便您打印出单独的行。

结论:

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