pl/sql中存储过程怎么写decode(a_id, '12', '风, '28', '区') ?编译报错,decode 功能怎么实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pl/sql中存储过程怎么写decode(a_id, '12', '风, '28', '区') ?编译报错,decode 功能怎么实现相关的知识,希望对你有一定的参考价值。

decode(a_id, '12', '风', '28', '区'),风字后面少了一个单引号。
最科学的办法,还要加一个default值

decode(a_id, '12', '风', '28', '区','找不到对应')

decode的用法:

DECODE函数相当于一条件语句(IF).它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值.
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值
下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type,
DECODE(blood_test_flag,’Y’,’Yes’,’N’,’No’,NULL,’None’,’Invalid’)
FROM checkup;追问

我试了在存储过程中不用单引号就可以

追答

如果a_id是数值的,那,12,28,这些条件,就不需要加单引号的,但
取值你想输出字符型的,一定要加单 引号。

参考技术A 少了个参数。
decode(a_id, '12', '风', '28', '区','缺省值')
意为:if a_id = '12' then
返回 '风'
elsif a_id = '28' then
返回 '区'
else
返回 '缺省值'
end if;
参考技术B decode(a_id, '12', '风', '28', '区');
你少了个'号
decode(列,值1,值2,值3,值4)
就是如果列的值等于值1则 返回值2 如果等于值3则返回值4 依次类推追问

没发现少什么啊,直接执行可以的,在存储过程中执行不了而已

Oracle数据库的存储过程怎么写?

Oracle存储过程基本语法:

CREATE OR REPLACE PROCEDURE 存储过程名 
IS 
BEGIN 
NULL; 
END;

解释:

行1: 
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 
行2: 
IS关键词表明后面将跟随一个PL/SQL体。 
行3: 
BEGIN关键词表明PL/SQL体的开始。 
行4: 
NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 
行5: 
END关键词表明PL/SQL体的结束。


参考技术A 1 CREATE OR REPLACE PROCEDURE 存储过程名
  2 IS
  3 BEGIN
  4 NULL;
  5 END;
  
行1:
  CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:
  IS关键词表明后面将跟随一个PL/SQL体。
行3:
  BEGIN关键词表明PL/SQL体的开始。
行4:
  NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
行5:
  END关键词表明PL/SQL体的结束.
存储过程创建语法:
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围); --vs_msgVARCHAR2(4000);
变量2 类型(值范围);
Begin
Select count(*) into 变量1 from 表A where列名=param1;

If (判断条件) then
Select 列名 into 变量2 from 表A where列名=param1;
Dbms_output。Put_line(‘打印信息’);
Elsif (判断条件) then
Dbms_output。Put_line(‘打印信息’);
Else
Raise 异常名(NO_DATA_FOUND);
End if;
Exception
When others then
Rollback;
End;本回答被提问者采纳
参考技术B CREATE OR REPLACE PROCEDURE 名称 (入参名1 in 类型1.....入参名n in 类型n) as 或者 is
begin
过程体

EXCEPTION
WHEN OTHERS THEN
异常处理,可以省略
end
参考技术C create or replace procedure (xxx)
is
xx
begin
xxx
end;
/
这个问题有人问过了,你可以搜一下的
参考技术D create [or replace] pro_name [(parameter1[,parameter2]...)]is|as
begin
plsql_sentences;
[exception]
[dowith_sentences;]
end [pro_name];
pro_name:存储过程的名称;
parameter1:存储过程的参数,若是输入参数,则需要在其后指定‘in’关键字;
plsql_sentences:PL/SQL语句,它是存储过程功能实现的主体;
dowith_sentences:异常处理语句,也是PL/DQL语句,这是一个可选项;

以上是关于pl/sql中存储过程怎么写decode(a_id, '12', '风, '28', '区') ?编译报错,decode 功能怎么实现的主要内容,如果未能解决你的问题,请参考以下文章

在PL / SQL过程调用中使用DECODE

PL/SQL中测试存储过程,如何立即输出DBMS_OUTPUT的语句。

一个存储过程,报错如下 13 PL/SQL:ORA-00922:缺少或无效选项 13 PL/SQL:SQL Statement ignored

Oracle数据库的存储过程怎么写?

pl/sql中怎么批量导出数据库数据

oracle 存储过程 权限问题 PL/SQL: ORA-01031: 权限不足