如何从不同的表中获取多个值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 LOOP
或 SELECT INTO
语法的变体来捕获结果以供后续处理。您应该寻找一些关于 pl/sql 编程的文档。
你要明白pl/sql绝对不是为屏幕输出而设计的
可以使用 dbms_output.put_line
打印出字符串值,但要将一行值格式化为合适的字符串,您完全靠自己。
如果您的结果包含多个列,则屏幕输出的格式设置会变得非常麻烦,因为您没有任何格式设置实用程序,例如 java String.format()
来帮助您。
如果您的结果包含不止一行,您必须提供某种循环结构,以便您打印出单独的行。
结论:
这些是 pl/sql 的缺点 - 我真的没有看到任何好处 - 除非你的目标是对正在读取的数据应用一些逻辑,而不是仅仅将它打印到屏幕或文件上。
我通常每天都做这个查询:
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 LOOP
或SELECT INTO
语法的变体来捕获结果以供后续处理。您应该寻找一些关于 pl/sql 编程的文档。
你要明白pl/sql绝对不是为屏幕输出而设计的
可以使用 dbms_output.put_line
打印出字符串值,但要将一行值格式化为合适的字符串,您完全靠自己。
如果您的结果包含多个列,则屏幕输出的格式设置会变得非常麻烦,因为您没有任何格式设置实用程序,例如 java String.format()
来帮助您。
如果您的结果包含不止一行,您必须提供某种循环结构,以便您打印出单独的行。
结论:
这些是 pl/sql 的缺点 - 我真的没有看到任何好处 - 除非你的目标是对正在读取的数据应用一些逻辑,而不是仅仅将它打印到屏幕或文件上。