- 浏览: 362459 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (511)
- AgileMethodology (4)
- RDBMS (32)
- NoSQL (16)
- Java (27)
- Python (28)
- Maven (15)
- Linux (27)
- CommonUtils (13)
- IDE (8)
- JavaScript (17)
- jQuery (2)
- OSGi (2)
- JavaWeb (5)
- Spring (37)
- Struts2 (3)
- ORM (13)
- Ant (1)
- apache-tiles (1)
- FreeMarker (2)
- JSON (8)
- XML (1)
- JUnit (3)
- Lucene (1)
- Web Service (9)
- Design Pattern (13)
- Algorithm (21)
- JVM (14)
- Hadoop (16)
- Spark (5)
- Scala (31)
- Git (4)
- Server (3)
- Node.js (18)
- Concurrent (42)
- Lock (9)
- Collections (3)
- Network (11)
- MicroService (7)
- Docker (13)
- FP (20)
- spring.io (2)
- ELK (1)
- Kafka (5)
最新评论
1.作用域
变量的作用域是指变量的有效作用范围,它从变量声明开始,直到当前块结束。只有在其作用域范围之内,程序才能使用该变量,否则将导致编译错误。
<<block>> DECLARE v_1 VARCHAR2 (30) := 'block中的全局v1'; BEGIN DBMS_OUTPUT.put_line (v_1); <<subblock_1>> DECLARE v_1 VARCHAR2 (30) := 'subblock_1中的局部v1'; BEGIN DBMS_OUTPUT.put_line (v_1); DBMS_OUTPUT.put_line (block.v_1); END; <<subblock_2>> DECLARE v_1 VARCHAR2 (30) := 'subblock_2中的局部v1'; BEGIN DBMS_OUTPUT.put_line (v_1); DBMS_OUTPUT.put_line (block.v_1); END; END; /
2.用SELECT INTO语句给变量赋值
除了用常量给变量赋值之外,还可以从数据库表中查询出值来赋予变量。
DECLARE v_bonus NUMBER (8, 2); v_empno NUMBER (6) := 7369; BEGIN SELECT sal * 0.10 INTO v_bonus FROM emp WHERE empno = v_empno; DBMS_OUTPUT.put_line ( '雇员' || TO_CHAR (v_empno) || '的奖金是:' || TO_CHAR (v_bonus)); END; /
3.TIMESTAMP(s)
TIMESTAMP是DATE数据类型的扩展。存储了年、月、日、时、分、秒,秒带有小数,还包括了上午、下午、时区。其中后面的(s)是可选的,s表示秒部分的小数位位数,s的取值范围是s=0~9。默认的TIMESTAMP格式是由初始化参数NLS_TIMESTAMP_FORMAT来设置的。
DECLARE v_datetime TIMESTAMP (9); BEGIN v_datetime := SYSTIMESTAMP; DBMS_OUTPUT.put_line (v_datetime); END; /
4.%TYPE
为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。这样,当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型也自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,只能采用这种方法定义变量的数据类型。
DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; c_tax_rate CONSTANT NUMBER (3, 2) := 0.03; v_sal_tax v_sal%TYPE; BEGIN SELECT ename, sal INTO v_ename, v_sal FROM emp WHERE empno = &eno; v_sal_tax := v_sal * c_tax_rate; DBMS_OUTPUT.put_line ('雇员名称:' || v_ename); DBMS_OUTPUT.put_line ('工资:' || v_sal); DBMS_OUTPUT.put_line ('所得税:' || v_sal_tax); END; /
5.%ROWTYPE
如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表中的各列的变量要简捷得多,并且不容易遗漏、出错。这会增加程序的可维护性。
DECLARE v_emp emp%ROWTYPE; BEGIN SELECT * INTO v_emp FROM emp WHERE empno = &eno; DBMS_OUTPUT.put_line ('雇员名称:' || v_emp.ename); DBMS_OUTPUT.put_line ('工资:' || v_emp.sal); DBMS_OUTPUT.put_line ('岗位:' || v_emp.job); END; /
6.RECORD
定义记录数据类型。它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的、分离的、基本数据类型的变量组成一个整体的方法,即RECORD符合数据类型。在使用记录数据类型变量时,需要在声明部分先定义记录的组成、记录的变量,然后在执行部分引用这记录变量本身或其中的的成员。
DECLARE TYPE emp_record_type IS RECORD ( name emp.ename%TYPE, salary emp.sal%TYPE, job emp.job%TYPE ); v_emp_record emp_record_type; BEGIN SELECT ename, sal, job INTO v_emp_record FROM emp WHERE empno = &eno; DBMS_OUTPUT.put_line ( '雇员名称:' || v_emp_record.name || '工资:' || v_emp_record.salary || '岗位:' || v_emp_record.job); END; /
7.TABLE
定义记录表(或索引表)数据类型。它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,类似于C语言中的二维数组,使得可以在PL/SQL中模仿数据库中的表。关键字INDEX BY表示创建一个主键索引,以便引用记录表变量中的特定的行。
DECLARE TYPE emp_table_type IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; v_emp_table emp_table_type; BEGIN SELECT ename, sal INTO v_emp_table (1).ename, v_emp_table (1).sal FROM emp WHERE empno = 7369; SELECT ename, sal INTO v_emp_table (2).ename, v_emp_table (2).sal FROM emp WHERE empno = 7788; DBMS_OUTPUT.put_line ( '7369雇员名称:' || v_emp_table (1).ename || ' 工资:' || v_emp_table (1).sal); DBMS_OUTPUT.put_line ( '7788雇员名称:' || v_emp_table (2).ename || ' 工资:' || v_emp_table (2).sal); END; /可以看出,记录表可以存储多行、多列的数据,就好像在PL/SQL中创建的一个表,所以也被称为PL/SQL表。
发表评论
-
MySQL UNSIGNED
2019-06-26 13:31 377原创转载请注明出处:https://agilestyle. ... -
MySQL索引最左匹配原则
2018-11-14 12:44 2619原创转载请注明出处:http://agilestyle.i ... -
MySQL SQL Create demo
2018-10-22 15:10 381ddl demo CREATE TABLE IF NOT ... -
(转)MySQL Explain详解
2018-09-30 13:16 381作者:陆炫志 出处:xuanzhi的博客 http:// ... -
Mac上安装MySQL后zsh: command not found: mysql
2018-08-19 21:20 4069原创转载请注明出处:http://agilestyle.i ... -
MySQL key值的含义
2017-09-25 21:05 663PRI — 主键约束; UNI — 唯一约束; MU ... -
SQL常见笔试题
2017-09-06 23:00 385原创转载请注明出处:http://agilestyle.i ... -
MySQL扩展
2017-08-23 21:50 487原创转载请注明出处 ... -
表级锁、行级锁、页面锁
2017-04-17 21:30 491原创转载请注明出处 ... -
Oracle优化常见术语
2017-04-02 23:03 449原创转载请注明出处:http://agilestyle.i ... -
Oracle分区
2017-04-02 22:03 409原创转载请注明出处:http://agilestyle.i ... -
MySQL分区
2017-02-24 14:11 375原创转载请注明出处:http://agilestyle.i ... -
Oracle常见术语、操作、区别
2017-02-22 20:55 843原创转载请注明出处:http://agilestyle.i ... -
ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
2017-02-15 17:03 471原创转载请注明出处:http://agilestyle.i ... -
SQL UNION 操作符
2016-11-24 16:22 679原创转载请注明出处 ... -
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
2016-09-02 10:16 374use query below to check activ ... -
MySQL压缩版安装配置
2016-05-18 23:29 614原创装载请注明出处:http://agilestyle.i ... -
综合数据和分组函数
2016-01-30 21:41 578desc emp; COUNT函数 selec ... -
1NF、2NF、3NF
2016-01-28 02:53 409第一范式: 所有的键属性(列)都已定义 没有任何重复组 ... -
ORACLE11gR2完全卸载(转)
2015-12-19 16:45 15251. 停止“服务”中所有的ORCLE服务。 ...
相关推荐
在Windows 7 64位操作系统中安装和配置PL/SQL Developer 32位版本可能会遇到一些挑战,因为默认情况下,64位系统并不直接支持32位应用程序。不过,通过一些步骤,我们可以成功地安装并运行PL/SQL Developer这款强大...
Oracle是世界上最广泛使用的数据库管理系统之一,它以其强大的功能和稳定性在企业级应用中...为了更深入地学习Oracle,你可以进一步探索这些主题,同时实践`oracle_basic_example.sql`中的示例代码,以巩固你的理解。
- 如果需要使用额外的功能,如LOB处理或调用PL/SQL包,可能需要安装其他组件,如`instantclient-basic-light`、`instantclient-sdk`等。 - 在防火墙或安全策略中,确保数据库服务器的监听端口(默认1521)是开放的。...
2. **sqlplus.exe**: SQL*Plus 是一个命令行工具,允许用户直接执行SQL语句和PL/SQL块。 3. **tnsnames.ora**: 这个文件包含了网络服务名的定义,用于描述如何连接到Oracle数据库服务器,包括主机名、端口号和SID...
Are you frustrated by your attempts to learn ...Program in SQL, SQL*Plus, and PL/SQL Perform major DBA responsibilities Enable remote access Prepare your database for Web access and e-commerce
- **SQL*Plus**:一个命令行工具,用于执行SQL查询和PL/SQL程序块。 - **Oracle Call Interface (OCI)**:允许C和C++应用程序通过API调用来访问Oracle数据库。 - **Universal Connection Pool (UCP)**:管理...
它包括了SQL*Net、Oracle Call Interface (OCI)、Pro*C/C++、Oracle Named Pipes等组件,支持多种编程语言如PL/SQL、Java、C++等。"instantclient-basic-win32-11.2.0.1.0.zip"和"instantclient-basic-nt-12.1.0.1.0...
Oracle Instant Client是一个轻量级的软件组件,它允许你在本地计算机上运行不需完整Oracle客户端安装的程序,例如PL/SQL Developer或Toad等。它包含了与Oracle数据库通信所需的基本库文件,支持SQL*Plus、OCI...
Database\Apress Expert PL SQL Practices for Oracle Developers and DBAs.mobi Database\Apress Oracle PLSQL Recipes - A Problem-Solution Approach.mobi Database\Apress Pro Oracle Database 11g ...
An Example ............................................................................................................................................... 6 Debriefing ...................................