Oracle 过程中变量赋值

create or replace function get_sal1(id employees.employee_id%type)
  return number is

  sal employees.salary%type;

begin
  sal := 0;
  select salary into sal from employees where employee_id = id;
  return sal;
end;

 

create or replace function get_sal1(id employees.employee_id%type)
  return number is

  sal employees.salary%type:= 0;
  --sal := 0;
begin

  select salary into sal from employees where employee_id = id;
  return sal;
end;

  

 

 下面会报错:

Compilation errors for FUNCTION HR.GET_SAL1

Error: PLS-00103: 出现符号 "SELECT"在需要下列之一时:         * & = - + ; < / > at in           is mod remainder not rem <an exponent (**)> <> or != or ~= >=           <= <> and or like like2 like4 likec between || multiset           member submultiset        符号 ";" 被替换为 "SELECT" 后继续。 Line: 8 Text: select salary into sal from employees where employee_id = id;

create or replace function get_sal1(id employees.employee_id%type)
  return number is

  sal employees.salary%type;

begin
  sal := 0
  select salary into sal from employees where employee_id = id;

  return sal;
end;

  这个也会报错:

Compilation errors for FUNCTION HR.GET_SAL1

Error: PLS-00103: 出现符号 "="在需要下列之一时:         constant exception           <an identifier> <a double-quoted delimited-identifier> table           long double ref char time timestamp interval date binary           national character nchar        符号 "<an identifier>" 被替换为 "=" 后继续。 Line: 5 Text: sal := 0;

create or replace function get_sal1(id employees.employee_id%type)
  return number is

  sal employees.salary%type;
  sal := 0;

begin

  select salary into sal from employees where employee_id = id;
  return sal;
end;

  

转:

PL/SQL支持SQL中的数据类型,PL/SQL中正常支持NUMBER,VARCHAR2,DATE等Oracle SQL数据类型。声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量声明必须在声明部分。声明变量的语法是:


变量名 数据类型[ :=初始值]

语法解析:

数据类型如果需要长度,可以用括号指明长度,比如:varchar2(20)。

 

声明变量


SQL> DECLARE

  2       sname VARCHAR2(20) :='jerry';  ①

  3  BEGIN

  4       sname:=sname||' and tom';  ②

  5       dbms_output.put_line(sname);  ③

  6  END;

  7  /jerry

PL/SQL procedure successfully completed

代码解析:

①     声明一个变量sname,初始化值是“jerry”。字符串用单引号,如果字符串中出现单引号可以使用两个单引号(’’)来表示,即单引号同时也具有转义的作用。②     对变量sname重新赋值,赋值运算符是“:=”。

③     dbms_output.put_line是输出语句,可以把一个变量的值输出,在SQL*Plus中输出数据时,可能没有结果显示,可以使用命令:set serveroutput on设置输出到SQL*Plus控制台上。

 

 

对变量赋值还可以使用SELECT…INTO 语句从数据库中查询数据对变量进行赋值。但是查询的结果只能是一行记录,不能是零行或者多行记录

 

 

数据库赋值
  数据库赋值是通过 SELECT 语句来完成的,每次执行 SELECT 语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:
例:
DECLARE
emp_id    emp.empno%TYPE :=7788;
emp_name  emp.ename%TYPE;
wages     emp.sal%TYPE;
BEGIN
SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages
FROM emp WHERE empno = emp_id;
Dbms_output.put_line(emp_name||'----'||to_char(wages));
END;
 
提示:不能将SELECT语句中的列赋值给布尔变量。

 

 

字符及数字运算特点
空值加数字仍是空值:NULL + < 数字> = NULL
空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串>

 

 

 

 

时间: 2024-09-13 12:22:09

Oracle 过程中变量赋值的相关文章

select-存储过程中SELECT赋值报错什么原因?

问题描述 存储过程中SELECT赋值报错什么原因? CREATE OR REPLACE PROCEDURE PROC_DICTABLE_TBYSFL(p_ANetUser VARCHAR)ISvc_DICTABLEID varchar2(36);vc_DICTABLECOLID varchar2(36);vc_DICCOL1 VARCHAR2(20);vc_DICCOL2 VARCHAR2(20);vc_DICCOL3 VARCHAR2(20);vc_DICCOL4 VARCHAR2(20);v

使用ORACLE过程中常见的45个问题及解答

1.oracle安装完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_temp 2.oracle9iaswebcache的初始默认用户和密码? administrator/administrator 3.oracle8.0.5怎幺创建数据库? 用orainst.如果有motif界面,可以用orainst/m 4.oracle8.1.7怎幺创建数据库? dbassist 5.o

matlab-为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值

问题描述 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 为什么MATLAB中通过表达式对某变量赋值,但是该变量值不发生变化,还是保持原先的值 解决方案 看看是不是有别的地方又赋值了,或者变量名搞错了. 解决方案二: 调试过程中可以很明显的看到,赋值符号右边是对的,但是就是不能输出到左边变量 解决方案三: 该变量是不是全局变量呢

探索Oracle之 EXP/IMP过程中的字符集问题

1. 问题描述:        数据库之间的数据迁移是一个很常见的作业,EXP/IMP工具是一个常用的数据迁移及转化工具,因其导出文件具有平台无关性,所以在跨平台迁移中,最为常用.但在实际操作过程中,涉及到源数据库,客户端,目标数据库三方面的字符集问题.操作人员对三者之间的字符集转换过程不了解,而冒然使用EXP/IMP命令,往往在迁移过程中报错终止,或是在没有报错的情况下成功导入,但其背后却存在隐患,在查询时经常显示乱码.   2.解决方法        2.1 源端数据库(1)→EXP客户端(

mysql 存储过程中变量的定义与赋值操作_Mysql

一.变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量,如果需要,可以使用default赋默认值. 定义一个变量语法如下: declare var_name[,...] type[default value]看一个变量定义实例 declare last date;二.mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set

Oracle RAC安装过程中碰到的“坑”和关键点(二)

(1) 依赖包的安装 Linux下安装Oracle,除了系统配置参数,我觉得依赖包的安装是另一个比较琐碎的操作. 本次安装碰到了几个包的问题: (a) rpm -Uvh gcc-4*提示: 02. error: Failed dependencies:  03.    cloog-ppl >= 0.15 is needed by gcc-4.4.7-4.el6.x86_64 04.    cpp = 4.4.7-4.el6 is needed by gcc-4.4.7-4.el6.x86_64

SQL优化过程中常见Oracle HINT的用法

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

oracle安装过程中无法换盘

问:我在redhat8上安装oracle9i过程中,提示换第二张盘,可我的光驱却退不出来,怎么办? 光驱是mount 命令加载的,可在换盘时,我在root下用umount命令提示光盘busy.怎么办? 在线等待!!!! 答:应该这样执行Oracle安装程序/mnt/cdrom/runinstaller, 如果你是先cd /mnt/cdrom的话就会出这样的问题 解决方法是先找出访问光驱的那个进程fuser -m /mnt/cdrom再杀掉这个进程,就可以弹出光驱了

oracle函数调用发生在SQL调用之前还是过程中

对于上一篇描述的DBMS_RANDOM.VALUE函数而言,显然函数的调用是发生在SQL语句的执行过程中.但是如果查看<SQL语句中常量的处理>这篇文章,可以看到对于TO_DATE之类的函数调用,当输入参数为常数时,Oracle会将其作为常数处理,在SQL语句执行之前就进行了调用. 同样都是函数,同样都以常数作为参数,同样都和表的列没有依赖,为什么有的函数在SQL调用前运行,而有的函数在SQL调用中执行.难道仅仅是因为一个是普通的函数,另一个是包中的函数. 问题显然与函数是否存储在包中没有关系