在pl/sql里面用select时必须配合into子句使用.(除非使用游标变量时不同)
如
DECLARE
LANG_IND varchar2(10);
l_tmp varchar2(20);
begin
LANG_IND:='A';
SELECT DECODE(LANG_IND,'D',ASSET_DESCRIPTION,'A',ALTERNATE_DESCRIPTION),ASSET_ID into l_tmp
FROM T_ASSET_MASTER WHERE ASSET_TYPE ='EQUIPMENT_TYPE' AND STATUS NOT IN ('D','X','I');
end;
如
DECLARE
LANG_IND varchar2(10);
l_tmp varchar2(20);
begin
LANG_IND:='A';
SELECT DECODE(LANG_IND,'D',ASSET_DESCRIPTION,'A',ALTERNATE_DESCRIPTION),ASSET_ID into l_tmp
FROM T_ASSET_MASTER WHERE ASSET_TYPE ='EQUIPMENT_TYPE' AND STATUS NOT IN ('D','X','I');
end;
解决方案 »
- 如何将查询出表中的一列的结果以一行的形式显示出来,具体如下
- oracle ODI安装
- oracle监听的问题
- 怎么在一个有(+)的sql里,再关联另1个表里的数据
- 大家帮帮忙,存储过程问题,在线等待,急啊!!!!
- 三张表结构相同,怎么高效率的把其中两张表的数据插入到另一张表,并且插入的数据不能有重复?
- 分布式事务处理过多?
- ADO 2.x 无法完全返回CLOB字段的问题
- SQL*Loader-524: 在 datafile (aaa.ctl) 结尾发现部分记录
- 如何使用别的web服务器而不是oracle,或web服务器与数据库服务器不在同一台机器上,想要调用oracle report做的报表该如何调用?
- [200分]在该存储过程传递的字符参数如何处理,我的处理老是出错!(急急急急急急急急急急急急急)
- 如何修改Oracle中的显示乱码问题
不过一楼这样能行么,select两个字段,怎么能into一个变量里去啊?
LANG_IND varchar2(10);
l_tmp numeric;
begin
LANG_IND:='A';
SELECT ASSET_ID into l_tmp
FROM T_ASSET_MASTER WHERE ASSET_TYPE ='EQUIPMENT_TYPE' AND STATUS NOT IN ('D','X','I');
end;这样就会出现:
DECLARE
*
ERROR 位于第 1 行:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在line 8加上decode就会出现:
ERROR 位于第 9 行:
ORA-06550: 第 8 行, 第 50 列:
PL/SQL: ORA-00923: 未找到预期 FROM 关键字
ORA-06550: 第 8 行, 第 1 列:
PL/SQL: SQL Statement ignored
2 LANG_IND varchar2(10);
3 l_tmp numeric;
4 begin
5 LANG_IND:='A';
6 SELECT 0 into l_tmp
7 FROM dual;
8 dbms_output.put_line(l_tmp);
9 end;
10 /PL/SQL 过程成功完成
参见:
SELECT, DECLARE
CURSOR, FETCH
语法:
SELECT [DISTINCT | ALL] {* | item_1[, item_2]...}
INTO {variable_1[, variable_2]... | record_1}
FROM {table_1 | (subquery)} [alias]
[, {table_2 | (subquery)} [alias]]...
rest_of_select_statement;
变量:
item_1,...,item_n:SELECT INTO 语句选择并存入给定变量中的项。
variable_1,...,variable_n:将保存数据的变量。
record_1:用户定义的记录或 %ROWTYPE 记录使用 SELECT INTO 语句将行的值提取出并置放在该记录中。
table_1,...,table_n:从其中选择数据的数据库表。
sub_query:向SELECT INTO 语句提供值或侄集的SELECT语句。
Alias:一般是SELECT语句中引用的表,或视图的短名字。
column_1,...,column_n:指定将要被修改表的列。
sql_expression:有效的 SQL 表达式。
WHERE search_condition:有效的WHERE 子句,用于指定s将要被修改的行。
CURRENT OF cursor_name:与cursor_name指定的游标相关的 FETCH 语句处理的当前行。
rest_of_select_statement:在SELECT 语句中FROM子句之后的合法语句。
例子:
PL/SQL
SELECT employee_name, employee_id,
employee_title
INTO e_name, e_id, e_title
FROM employees
WHERE employee_id = emp_id;