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 || <字符串> = < 字符串>

 

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

  1. oracle过程中动态语句实现

    oracle过程中动态语句实现 一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DD ...

  2. 获取Oracle过程中的OUT SYS_REFCURSOR值

    一个项目中的实例:获取Oracle过程中的返回SYS_REFCURSOR.注意:如果SYS_REFCURSOR为一个表或视图.可以通过表名%ROWTYPE获取每行数据,而不必另外定义type. 原过程 ...

  3. mysql中变量赋值

    http://www.cnblogs.com/qixuejia/archive/2010/12/21/1913203.html sql server中变量要先申明后赋值: 局部变量用一个@标识,全局变 ...

  4. Elisp 中变量赋值函数 set 与 setq 辨析

    在 Elisp 中,为变量赋值的函数有 set 与 setq,但是,两者存在很大的差异. 使用 set 赋值: 如果我们想为变量 flowers 赋值为一个 列表 '(rose violet dais ...

  5. Oracle 过程中检查数据表存在与否

    在过程中,尤其是每天执行的任务,通常要检查查询的数据表存在不存在,如果不存在则等待一段时间在进行执行,以下代码实现了这个功能,如果表不存在,抛出异常,交给异常处理代码,确保数据完整性 使用方法:p_C ...

  6. [转]Oracle存储过程给变量赋值的方法

    原文地址:http://blog.csdn.net/drbing/article/details/51821262 截止到目前我发现有三种方法可以在存储过程中给变量进行赋值:1.直接法     :=  ...

  7. Oracle存储过程给变量赋值的方法

    截止到目前我发现有三种方法可以在存储过程中给变量进行赋值: 1.直接法     := 如:v_flag := 0; 2.select into 如:假设变量名为v_flag,select count( ...

  8. db2迁移至oracle过程中的问题

    (1)时间日期问题: db2中‘2013-07-17 00:02:55’   oracle中to_date('2013-07-17 00:02:55' , 'YYYY-MM-DD HH24:MI:SI ...

  9. java中变量赋值的理解

    1.当赋值的值超出声明变量的范围时候,会报错! byte a =200 //会报错,因超出范围. byte a =(byte)200;//进行一个强制转换,就不会报错,不过会超出范围,超出部分会从头开 ...

随机推荐

  1. Insus.NET最近想更换一部手机

    Insus.NET曾经使用过好几部手机.给Insus.NET工作与生活上带来了方便.最近想更换一部新手机,因此记念一下以前使用过的手机.当时Insus.NET没有相机,下面图片是网上找的(前四部): ...

  2. 华硕X550VC安装ubuntu后wifi无法连接问题

    在网上找了很多资料比如重新编译内核,想办法连上有线网络然后更新驱动,下载离线驱动安装包…… 等等方法 其中有些方法实际测试的时候失败了,文章是几年前的,可能缺少某些依赖.上个网都这么麻烦实在让人疲惫. ...

  3. django修改数据库连接

    settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'domain', 'USER ...

  4. 设置使用的python版本

    一.查看当前使用的python版本,或设置使用的python版本 二.python2中默认使用ASCII码,无法识别中文,报错如图,解决办法,设置字符集为utf-8

  5. requests模块处理cookie,代理ip,基于线程池数据爬取

    引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的. 一.基于requests模块 ...

  6. 安装vm tools(方便虚拟机复制粘贴切换)

    在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(而不再用按ctrl+alT释放),而且还可以令 ...

  7. 基于openstack搭建百万级并发负载均衡器的解决方案

    最近,喜欢研究一些国外技术大咖们的文章,而这篇文章是基于openstack负载均衡器的解决方案,做的一些总结~希望能够给小伙伴带来一些灵感或者帮助. openstack现有的负载均衡解决方案,无论是l ...

  8. Samba服务为例、简单了解

    先.关掉SElinux.防火墙. ---------------------------- 安装rpm包(主): samba-3.6.9-164.el6.x86_64.rpm 启动检测:samba服务 ...

  9. flink学习笔记-split & select(拆分流)

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  10. 《Andrew Ng深度学习》笔记3

    浅层神经网络 初步了解了神经网络是如何构成的,输入+隐藏层+输出层.一般从输入层计算为层0,在真正计算神经网络的层数时不算输入层.隐藏层实际就是一些算法封装成的黑盒子.在对神经网络训练的时候,就是对神 ...