- 浏览: 5183297 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
转自:http://blog.sina.com.cn/s/blog_8139d7c30100sskd.html
1:define(即host变量)
Host变量主要作用是起到一个替代变量的作用,是主机环境可以和oracle进行交互的一个媒介
通过define定义host变量的时候必须指定变量名和变量的值,如果变量名已经存在于host变量中,则自动覆盖,这个值不可以指定类型,一律按char存储。
定义的格式是:define variable_name = value(必须定义的时候就赋值,否则define variable_name是显示已经存在的host变量值,不存在会报告未定义。)
另外可以使用define命令显示单个(define variable_name,不能显示多个)或全部(define)的host变量的值和类型(类型都是char)。
使用
首先要了解host变量只是在当前session环境中有效。了解对于host变量启用和关闭的命令是:set define on和set define off。这在sqlplus和plsql developer的command window中都可以使用,在sql或plsql中引用host变量,使用&符号,只是做一个简单的替换动作,比如
define x=TEST
Select * from ‘&x’;那么会报表找不到的错误,因为x被替换为test,那么’TEST’表是不存在的,TEST表存在,多了个单引号。
也可以不定义,直接在sql或plsql中在字符串前面加&符号,会提示你输入变量的值,然后替换。这种情况下是临时的变量,define命令查不到。
※经常使用host变量的场合是在写脚本的时候,脚本的有些地方经常变化,其他地方固定,那么可以使用&引用。
2,Variable(即绑定变量)
定义:
绑定变量主要是在sql中使用,达到sql解析一次,执行多次,从而提高效率的目的。绑定变量和host变量一样,也有定义的,也有临时性的。(临时性的在动态sql或动态plsql中通过占位符和using使用),其他的如sql会自动使用绑定变量的情况,此处不专门讨论。定义的绑定变量也是在当前session中有效。
Sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。
Var var_name type 声明一个指定类型的绑定变量,类型上面列表中已经列出。
对于var或var var_name只是显示所有的绑定变量或者指定名称的绑定变量的name和type,不显示其值,显示其值用print命令,可以采用help print查看。
Print是输出所有绑定变量的值,print name1 name2 ….是输出指定的绑定变量的值,多个用空格分割。对于host变量的define要么输出全部,要么输出单个,没有指定数目的。Print后面的绑定变量名也可以加前缀冒号,效果一样。
例:
使用:
1. 绑定变量在sql和plsql中直接引用必须加前缀 :。如要引用绑定变量a,则是 :a。
2. 在真正运行的PLSQL程序中,比如自动运行,有自己的一套机制。
3. 初始化和应用绑定变量,初始化定义的绑定变量,可以使用过程和函数,其中过程可以内部给绑定变量赋值、也可以参数是绑定变量,参数模式为out返回。使用函数和过程差不多,还可以使用call 函数来赋值,另外还可以使用SQLPLUS中的execute命令直接赋值,多个绑定变量用分号隔开。
4. 注意NULL值不可赋值给绑定变量,这在NDS中也成立。
使用过程和sqlplus命令初始化绑定变量:
SQL>begin
2 :a := 1;
3 end;
4 /
PL/SQL 过程已成功完成。
SQL>print a
A
--------------------------------------
1
SQL>select :a from dual;
:A
---------------------------------------
1
###使用execute初始化,初始化多个用分号隔开
SQL> var aa number;
SQL> var bb number;
SQL> exec :aa :=1; :bb :=2;
PL/SQL procedure successfully completed
aa
---------
1
bb
---------
2
下面看下NULL值赋值给绑定变量,会报错
SQL>exec :a:='aa',:b:=null;
BEGIN :a:='aa',:b:=null; END;
再如下面的例子,使用过程返回绑定变量,定义一个Var x number;
SQL>var aa number;
SQL>Create or replace procedure pt( m out number)
2 As
3 Begin
4 m:=10;
5 End;
6 /
过程已创建。
SQL>exec pt(m =>:aa);
PL/SQL 过程已成功完成。
SQL>print aa
aa
-------------------------
10
绑定变量是REFCURSOR类型。一个参数使用ref cursor,通过绑定变量类型定义为REFCURSOR,然后传入过程,打印绑定变量(效果和查询语句一样)。
SQL>var aa refcursor;
SQL>create or replace procedure pt(cur out SYS_REFCURSOR)
2 AS
3 BEGIN
4 OPEN cur for select * from test where rownum<3;
5 END;
6 /
过程已创建。
SQL>exec pt(cur =>:aa);
PL/SQL 过程已成功完成。
SQL>print aa
SJ ID
---- ----------
01 1
02 2
由上面可以知道,print可以直接把refcursor的结果打印出来,不需要迭代查找。
下面看看如何用函数初始化定义的绑定变量:
SQL>create or replace function concatestring(a in varchar2, b in varchar2) return varchar2
2 as
3 c varchar2(100);
4 begin
5 c := a||b;
6 return c;
7 end;
8 /
函数已创建。
SQL>variable aa varchar2(10);
SQL>call concatestring('a','b') into :aa;
调用完成。
SQL>print aa
aa
----------------------------------------------------------------
ab
当然也可以将函数的参数定义为out模式来初始化,我们这里使用call命令调用函数把结果传给绑定变量,调用格式为:call function(参数列表) into :绑定变量。
pl/sql中的参数和定义的变量(包括全局变量和临时变量)都会内部转为绑定变量,所以尽量在pl/sql中尽量使用静态sql,而不要使用动态sql,如果使用动态sql,要尽量加上绑定变量。
绑定变量的基本作用
绑定变量主要是sql的执行过程中,在解析sql之后会进行共享池(SGA)的检查,看优化器有没有分析优化过这个sql,环境必须完全一致才可以(包括大小写的一致,session情况一致等)。那么可以达到一次分析,多次执行的目的,这就是软解析,否则要进过解析,优化,行资源生成等一系列sql执行的过程,因为sql优化需要耗费很多资源,如果硬解析,sql性能会下降。
看SGA中的sql是否是软解析被调用多次,可以查看v$sql或v$sqlarea视图,查看列sql_text,executions,如:
select sql_text,executions from v$sql where sql_text like '%trademark%';
SQL_TEXT EXECUTIONS<被执行的次数>
select * from trademark where id=:tid 6
1:define(即host变量)
Host变量主要作用是起到一个替代变量的作用,是主机环境可以和oracle进行交互的一个媒介
通过define定义host变量的时候必须指定变量名和变量的值,如果变量名已经存在于host变量中,则自动覆盖,这个值不可以指定类型,一律按char存储。
定义的格式是:define variable_name = value(必须定义的时候就赋值,否则define variable_name是显示已经存在的host变量值,不存在会报告未定义。)
另外可以使用define命令显示单个(define variable_name,不能显示多个)或全部(define)的host变量的值和类型(类型都是char)。
使用
首先要了解host变量只是在当前session环境中有效。了解对于host变量启用和关闭的命令是:set define on和set define off。这在sqlplus和plsql developer的command window中都可以使用,在sql或plsql中引用host变量,使用&符号,只是做一个简单的替换动作,比如
define x=TEST
Select * from ‘&x’;那么会报表找不到的错误,因为x被替换为test,那么’TEST’表是不存在的,TEST表存在,多了个单引号。
也可以不定义,直接在sql或plsql中在字符串前面加&符号,会提示你输入变量的值,然后替换。这种情况下是临时的变量,define命令查不到。
※经常使用host变量的场合是在写脚本的时候,脚本的有些地方经常变化,其他地方固定,那么可以使用&引用。
2,Variable(即绑定变量)
定义:
绑定变量主要是在sql中使用,达到sql解析一次,执行多次,从而提高效率的目的。绑定变量和host变量一样,也有定义的,也有临时性的。(临时性的在动态sql或动态plsql中通过占位符和using使用),其他的如sql会自动使用绑定变量的情况,此处不专门讨论。定义的绑定变量也是在当前session中有效。
Sqlplus中可以使用大于等于3个字符表示一个命令,这里我们用var,var命令是声明一个绑定变量,只能给予名称和类型,定义的时候不能赋值,赋值可以在plsql中或者采用函数赋值(而host变量定义的时候必须赋值)。
Var var_name type 声明一个指定类型的绑定变量,类型上面列表中已经列出。
对于var或var var_name只是显示所有的绑定变量或者指定名称的绑定变量的name和type,不显示其值,显示其值用print命令,可以采用help print查看。
Print是输出所有绑定变量的值,print name1 name2 ….是输出指定的绑定变量的值,多个用空格分割。对于host变量的define要么输出全部,要么输出单个,没有指定数目的。Print后面的绑定变量名也可以加前缀冒号,效果一样。
例:
使用:
1. 绑定变量在sql和plsql中直接引用必须加前缀 :。如要引用绑定变量a,则是 :a。
2. 在真正运行的PLSQL程序中,比如自动运行,有自己的一套机制。
3. 初始化和应用绑定变量,初始化定义的绑定变量,可以使用过程和函数,其中过程可以内部给绑定变量赋值、也可以参数是绑定变量,参数模式为out返回。使用函数和过程差不多,还可以使用call 函数来赋值,另外还可以使用SQLPLUS中的execute命令直接赋值,多个绑定变量用分号隔开。
4. 注意NULL值不可赋值给绑定变量,这在NDS中也成立。
使用过程和sqlplus命令初始化绑定变量:
SQL>begin
2 :a := 1;
3 end;
4 /
PL/SQL 过程已成功完成。
SQL>print a
A
--------------------------------------
1
SQL>select :a from dual;
:A
---------------------------------------
1
###使用execute初始化,初始化多个用分号隔开
SQL> var aa number;
SQL> var bb number;
SQL> exec :aa :=1; :bb :=2;
PL/SQL procedure successfully completed
aa
---------
1
bb
---------
2
下面看下NULL值赋值给绑定变量,会报错
SQL>exec :a:='aa',:b:=null;
BEGIN :a:='aa',:b:=null; END;
再如下面的例子,使用过程返回绑定变量,定义一个Var x number;
SQL>var aa number;
SQL>Create or replace procedure pt( m out number)
2 As
3 Begin
4 m:=10;
5 End;
6 /
过程已创建。
SQL>exec pt(m =>:aa);
PL/SQL 过程已成功完成。
SQL>print aa
aa
-------------------------
10
绑定变量是REFCURSOR类型。一个参数使用ref cursor,通过绑定变量类型定义为REFCURSOR,然后传入过程,打印绑定变量(效果和查询语句一样)。
SQL>var aa refcursor;
SQL>create or replace procedure pt(cur out SYS_REFCURSOR)
2 AS
3 BEGIN
4 OPEN cur for select * from test where rownum<3;
5 END;
6 /
过程已创建。
SQL>exec pt(cur =>:aa);
PL/SQL 过程已成功完成。
SQL>print aa
SJ ID
---- ----------
01 1
02 2
由上面可以知道,print可以直接把refcursor的结果打印出来,不需要迭代查找。
下面看看如何用函数初始化定义的绑定变量:
SQL>create or replace function concatestring(a in varchar2, b in varchar2) return varchar2
2 as
3 c varchar2(100);
4 begin
5 c := a||b;
6 return c;
7 end;
8 /
函数已创建。
SQL>variable aa varchar2(10);
SQL>call concatestring('a','b') into :aa;
调用完成。
SQL>print aa
aa
----------------------------------------------------------------
ab
当然也可以将函数的参数定义为out模式来初始化,我们这里使用call命令调用函数把结果传给绑定变量,调用格式为:call function(参数列表) into :绑定变量。
pl/sql中的参数和定义的变量(包括全局变量和临时变量)都会内部转为绑定变量,所以尽量在pl/sql中尽量使用静态sql,而不要使用动态sql,如果使用动态sql,要尽量加上绑定变量。
绑定变量的基本作用
绑定变量主要是sql的执行过程中,在解析sql之后会进行共享池(SGA)的检查,看优化器有没有分析优化过这个sql,环境必须完全一致才可以(包括大小写的一致,session情况一致等)。那么可以达到一次分析,多次执行的目的,这就是软解析,否则要进过解析,优化,行资源生成等一系列sql执行的过程,因为sql优化需要耗费很多资源,如果硬解析,sql性能会下降。
看SGA中的sql是否是软解析被调用多次,可以查看v$sql或v$sqlarea视图,查看列sql_text,executions,如:
select sql_text,executions from v$sql where sql_text like '%trademark%';
SQL_TEXT EXECUTIONS<被执行的次数>
select * from trademark where id=:tid 6
发表评论
-
Oracle连接故障的排除
2024-09-09 22:33 921Oracle版本为11G,操作系统为Windows Ser ... -
Oracle数据库相关系统突然提示“SQLException:违反协议”
2024-02-19 15:50 5507SQLException:违反协议这个异常可能由很多的 ... -
CentOS在Docker中安装Oracle
2024-02-06 12:13 13381.拉取Oracle镜像,并检 ... -
Windows Server安装oracle数据库一直停在82%
2023-02-04 12:01 653网上有个说法:服务器超过一定数量的CPU后,将不能正常安装 ... -
ORA-04030错误处理
2023-02-04 11:52 2746【错误描述】 错误信息如下: ORA-04030:在尝 ... -
ORA-04030错误处理
2023-02-04 11:45 403【错误描述】 错误信息如下: ORA-04030:在尝 ... -
Linux安装MySQL数据库
2019-06-10 22:27 18571.进入安装包所在目录,解压: tar zxvf mysql- ... -
确定MySQL在Linux系统中配置文件的位置
2019-04-14 19:30 28011.通过which mysql命令来查看mysql的安装位置。 ... -
mysql set names 命令和 mysql 字符编码问题
2019-04-12 00:34 1181转自:https://www.cnblogs.com/digd ... -
MYSQL中取当前周/月/季/年的第一天与最后一天
2018-11-17 23:16 2239转自:https://blog.csdn.net/ ... -
Oracle删除大量数据的实践
2016-11-07 18:03 5868一、引言 从来没有 ... -
Oracle 数据库简明教程 V0.1
2016-03-23 21:01 2090供初学者入门学习使用,以开发者常见、常用的知识为主,基本上 ... -
Oracle拆分字符串函数
2016-03-23 10:58 3395create or replace type string ... -
Oracle数据库远程连接无响应
2016-03-21 10:20 4354故障现象: 服务器本机使用sqlplus / as s ... -
Oracle PGA详解
2015-10-21 15:34 11512转自:http://yanguz123.iteye.com/b ... -
Oracle12C导入dmp数据
2015-10-08 23:43 20577Oracle12C,发生了较大的变化。以前熟悉的东西变得陌 ... -
SQLLDR数据导入小结
2015-07-25 22:06 75721.创建数据表 CREATE TABLE ... -
Window7安装Oracle10
2015-03-06 12:14 1642每次安装都要百度,转到自己的博客上,找起来方便,还能增加访 ... -
Oracle SQL Developer 连接 Mysql 数据库
2015-02-25 19:36 3706下载JDBC包,解压缩这里只要mysql-connector- ... -
Mysql数据备份与恢复
2015-02-25 19:15 1385备份/恢复策略 1. 要定期做 mysql备份,并考虑系统可以 ...
相关推荐
Oracle PL/SQL 中的 %TYPE 和 %ROWTYPE 应用详解 Oracle PL/SQL 是一种强大的编程语言,广泛应用于数据库开发中。在 PL/SQL 中,变量的声明和使用是非常重要的。其中,%TYPE 和 %ROWTYPE 是两个非常重要的概念,...
在Oracle数据库系统中,`&`符号有着特殊的含义,特别是在PL/SQL代码和SQL Developer工具中。这个符号经常被用作变量的引用或命令行解释器的子替代(substitution variable)。因此,当你试图在INSERT语句中直接使用`...
- **存储过程作用:** 在Oracle中,存储过程可以用于封装这些规则和逻辑,使之成为可重用的组件。 **创建权限:** - **CREATE PROCEDURE权限:** 允许用户创建存储过程。 - **CREATE ANY PROCEDURE权限:** 允许...
- **定义**: 存储过程是存储在Oracle数据库中的可执行程序单元,通常用于封装复杂的业务逻辑或数据操作任务。 - **组成元素**: 存储过程可以包含SQL语句、PL/SQL代码块以及Java代码等多种编程语言元素。 - **优势...
在 Oracle Database 11g 中,SQL 命令主要分为以下几类: - **DML(Data Manipulation Language)数据操作语言**: - `SELECT`:用于从数据库中检索数据。 - `INSERT`:用于向数据库表中插入新的行。 - `UPDATE`...
通过上述内容的学习,我们不仅掌握了Oracle存储过程的基础语法和概念,还了解了如何处理实际开发中遇到的一些常见问题,以及如何利用存储过程提高系统的性能和安全性。这些知识对于深入理解Oracle数据库和提高开发...
Oracle数据库中的动态SQL是编程时处理不确定或在运行时才能确定的SQL语句的重要工具。动态SQL分为两种主要方法:`EXECUTE IMMEDIATE`和`DBMS_SQL`包。 1. **EXECUTE IMMEDIATE用法**: - `EXECUTE IMMEDIATE`常...
Oracle数据库中的动态SQL是编程时的一种重要技术,它允许在程序运行时构建和执行SQL语句,而不是在编译时确定。动态SQL提供了更大的灵活性,能够应对不断变化的查询需求和用户输入,使得应用程序能够适应各种不同的...
第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...
### Oracle Database 10g PL/SQL Programming #### 1. Introduction to PL/SQL PL/SQL (Procedural Language for SQL) is a procedural extension to SQL that provides a powerful way to manipulate data within...
此外,除了`VARIABLE`命令,还有其他方式使用绑定变量,如使用`DEFINE`命令定义变量,或者在PL/SQL块中声明并使用变量。在PL/SQL程序中,可以直接在WHERE子句中使用变量,例如: ```sql DECLARE i NUMBER := 1; ...
SQLPLUS是Oracle数据库系统中的一个命令行工具,用于执行SQL语句和PL/SQL块,进行数据查询、数据库管理以及数据库脚本的编写。这个"SQLPLUS命令查询文档"很可能是一个详细介绍了SQLPLUS使用方法的CHM(Compiled ...
previously set variable or directive (e.g. ${foo}) ; Expressions in the INI file are limited to bitwise operators and parentheses: ; | bitwise OR ; ^ bitwise XOR ; & bitwise AND ; ~ bitwise NOT ; ! ...