彻底理解SQLPlus系统变量
- 格式:doc
- 大小:152.00 KB
- 文档页数:19
OracleSQLPlus常用命令及解释Oracle SQLPlus 常用命令及解释1.@执行位于指定脚本中的SQLPlus语句。
可以从本地文件系统或Web服务器中调用脚本。
可以为脚本中的变量传递值。
在iSQL*Plus 中只能从Web服务器中调用脚本。
2.@@执行位于指定脚本中的SQL*Plus语句。
这个命令和@(“at”符号)命令功能差不多。
在执行嵌套的命令文件时它很有用,因为它会在与调用它的命令文件相同的路径或url中查找指定的命令文件。
在iSQL*Plus中只支持url形式。
3./执行保存在SQL缓冲区中的最近执行的SQL命令或PL/SQL块。
在SQL*Plus命令行中,可在命令提示符或行号提示符使用斜线(/)。
也可在iSQL*Plus的输入区中使用斜线(/)。
斜线不会列出要执行的命令。
4.ACCEPT可以修改既有变量,也可定义一个新变量并等待用户输入初始值,读取一行输入并保存到给出的用户变量中。
ACCEPT在iSQL*Plus中不可用。
5.APPEND把指定文本添加到SQL缓冲区中当前行的后面。
如果text的最前面包含一个空格可在APPEND和text间输入两个空格。
如果text的最后是一个分号,可在命令结尾输入两个分号(SQL*Plus会把单个的分号解释为一个命令结束符)。
APPEND 在iSQL*Plus中不可用。
6.ARCHIVE LOG查看和管理归档信息。
启动或停止自动归档联机重做日志,手工(显示地)归档指定的重做日志,或者显示重做日志文件的信息。
7.ATTRIBUTE为对象类型列的给定属性指定其显示特性,或者列出单个属性或所有属性的当前显示特性。
8.BREAK分开重复列。
指定报表中格式发生更改的位置和要执行的格式化动作(例如,在列值每次发生变化时跳过一行)。
只输入BREAK而不包含任何子句可列出当前的BREAK定义。
9.BTITLE在每个报表页的底部放置一个标题并对其格式化,或者列出当前BTITLE定义。
前言:使用变量可以保存计算机需要处理的数据,为了给该变量分配适当的内存空间,还需要指定数据类型,有的数据类型还需要指定长度,如字符串。
有些类型可以用于建表(如char,有些则不能(如boolean,rowtype。
同样是字符串,建表时的限制为4000,在脚本中则为3万多。
简单语法:变量名数据类型; 完整语法:变量名 [constant] 变量类型 [not null] [default 值 | :=值] 其中“[ ]”表示可以不写,“|”表示任选其一。
下面给出变量定义及解释,数据类型先用建表时所用的数据类型: v1 char:说明:没有给出长度,所以v1只能保存一个字符。
超过了则会出错:数字或值错误 : 字符串缓冲区太小。
v2 varchar2(10; 说明:v2最多只能保存10个字符。
如果不写长度,会出错:字符串长度限制在范围(1...32767 v3 number; 说明:v3保存的数字范围非常大,几乎可以认为是没有限制的。
v4 number(5; 说明:v4最多能够保存5位整数。
如果有小数,Oracle会自动四舍五入。
如果整数部分超过5位,则会报错:数字或值错误 : 数值精度太高。
v5 number(5,2; 说明:v5最多能够保存3位整数,2位小数。
如果小数位不止2位,则Oracle会自动四舍五入。
整数位超过3位会报错,同上。
v6 date; 说明:可以直接保存sysdate的值;如果是指定日期,则要用to_date来转化。
否则报错:文字与格式字符串不匹配。
定义了变量,变量的默认值为空,此时进行计算,结果一定为NULL。
所以变量必须初始化。
初始化有三种方式: v7 constant number := 100; 说明:定义v7为常量,定义时就必须给定值。
然后在程序中就不能再对v7进行赋值了,否则会报错:表达式 'V7' 不能用作赋值目标。
v8 number default 10; 说明:定义v8时就给定默认值10。
Oracle之PLSQL的变量小结Variable summary of PL/SQL's OracleThere are four types of PLSQL variables, namely:Scalar type (Scalar)-composite type (Composite)-reference type (Reference)LOB type (Large Object)1 scalar type:-a variable that holds only a single value-when defining, you must specify scalar data types1. 1 commonly used scalar types(1)VARCHAR2 (n);Defines strings of variable lengthN specifies the maximum length of the stringThe maximum value of n is 32767 bytesThe length must be specified when usingWhen the PLSQL block uses this data type to manipulate the VARCHAR2 table column, the value should be no more than 4000 bytes long(2)CHAR (n):Defines a fixed length stringN specifies the maximum length of a stringThe maximum value of n is 32767 per seSpecifies the length when used. If not specified, the default value is 1When the PLSQL block uses this data type to manipulate the CHAR2 table column, the value should be no more than 2000 bytes long(3)NUMBER (P, s);Defines integer and floating-point numbers of fixed lengthP represents precision, used to specify the total number of digitsS represents the scale used to specify the number of digits after the decimal point(4)DATEDefine date and data data(5)BOOLEANDefine Boolean variablesValues are: TRUE, FALSE, NULLFor PLSQL unique data types, this type of data cannot be used by table columnsNULL stands for missing, inapplicable, or unknown(6)LONG and LONG ROWLong: a data type is used to define a variable length string, similar to the VARCHAR2 data type, but the maximum length of its string is 32760 bytesLong row: data types are used to define binary data of variable length, with a maximum length of 32760 bytes(7)BINARY_INTEGERInteger definedNumerical range between -2147483647 and 2174483647(8)BINARY_FLOAT and BINARY_DOUBLEBINARYFLOAT defines single precision floating point numbers (Oracle, 10g, new additions)BINARY DOUBLE defines double precision floating point numbers (Oracle, 10g, new additions)(9)TIMESTAMPDefine time and date data (new additions to Oracle 9i)The assignment method is exactly the same as the assignment method for the date variableWhen displaying TIMESTAMP variable data, not only will the date be displayed, but also the time and the afternoon mark will be displayed1. 2. Define scalar typesSyntax:Identifier, [CONSTANT], datatype, [NOT, NULL] [: =|DEFAULT, expr]Identifier: Specifies the name of a variable or constantCONSTANT: the specified constantDatatype: the type used to specify variables or constantsNOT NULL: non empty, yes, it must be initialized =:assignment matches DEFAULT: defaultsExpr: initial value1.3scalar definition rulesEach row declares a variableAssignment of variables using: identifier = = value:Variable names up to 30 characters1.4use the%TYPE propertyInstall database columns or other variables to determine the type and length of new variables (dynamic and binding)Syntax: identifier Table. column_name%TYPE;或identify other__________type variable name).2、复合变量指用于存放多个值的变量当定义复合变量时,必须要使用P1 / sql的复合数据类型pl / sql的复合数据类型包括.pl / sql记录pl / sql表(索引表)pl / sql嵌套表varray关于这些复合数据类型,由相关章节给出3、参照变量指用于存放数值指针的变量可以通过参照变量来共享相同对象,从而降低占用空间两种参照变量.游标变量(ref. 8).对象类型变量(ref obj _ type)关于这些参照变量,由相关章节给出4、lob变量用于存储大批量数据的变量分为两种.内部lob包括clob、blob、nclob,它们的数据被存储在数据库中,并且支持事务操作.外部lob bfile,该类型数据被存储在os文件中,并且不支持事务操作.存储大批量字符数据clob.nclob存储大批量字符数据,unicode编码.存储大批量二进制数据blob.存储指向OS文件的指针bfile.5、非pl / sql变量5. 1、替换变量(仅用于sql plus或者用于原理和sql * * plus相同的开发工具).临时存储值利用它可以达到创建通用脚本的目的利用它可以达到和用户交互,故在sql * plus中又称交互式命令替换变量的格式式在变量名称前加一个,以便在运行sql命令时提示用户输入替换数据,然后按输入数据运行sql命令语法.(1)& 〃& 变量名〃eg: & name;生命周期:单次引用中,不需要声明,如果替换字符或日期类型,最好用单引号扩起使用范围where> order by>列表达式、表名、整个select语句中.(2)& 〃& 变量名〃eg: & & name;生命周期整个会话(session连接),不需要声明.(3)define "define 变量名=变量值"eg: define a = dark.生命周期:整个会话,预先声明,使用时用&引用声明的变量define variable =用户创建的char类型的值:define变量名= 值.define column _ name (变量名):查看变量命令.undefine清除变量变量名.define:查看在当前会话中所有的替换变量和它们的值(4)the environment整个会话生命周期.预先声明,可以客户化提示信息,使用时用&引用声明的变量.定义.accept 变量名name number / char / date prompt '提市信息内容 ' 即:vac (fte) [num ber] variable [date] [for | tank | [mat]] [-][format] [full text document by | ompt nopr []] [hide]解释.prompt命令用于输出提示用户的信息,以便使用户了解脚本文件的功能和运行情况.PAUSE command: used to pause the script fileHIDE option: used to hide user input so that others are invisible and safeThis command means: when the PLSQL program execution to the time variable name, this requires the user to interact in order to continue execution, the PLSQL program will show "information content" allows users to input relevant information (if the hide option is specified, then the next user input will be displayed increased with an asterisk. Safe, a bit like a password), user input content is received and it paid name, type on the message of "content" user input content, PLSQL program developer by number/char/date is specified, the variable name get the correct value, continue to implement the relevant program below!Example: accept, a, char, prompt. Please enter the employee's employment time (yyyy-mm-dd): ' hideExamples: accept, a, char, prompt, 5 input, a:', hideSubstitution variables are very dependent on the SQL *Plus environment, which is not available when the environment variable verify is turned off and can be used only if it is turned on:Set verify (environment variable) off: close the debug command (turn off the replacement process)Set verify (environment variable) on; open the debug command (you can see the replacement process)5. 2, SQL *PLUS environment variables (used only for SQL, *Plus, or the same development tools for the principles and SQL *Plus):ECHO display echoDoes HEADING (OFF/ON} display column headers?The size of the amount of return each ARRAYSIZE(20/n} receives from the queryFEEDBACK(OFF/ON} feedback, feedback informationLONG{80/n}on/text} LONG typeLINESIZE line widthSET LINESIZE n (preferably within 200)PAGESIZE: sets the size of the page. SET PAGESIZE NWrap(off/on} discountSET modifySHOW displayThe formatted display command in SQL *PLUS:COLUMN [column option] allows you to set the format of field or field aliasesCOLUMN last name HEADING employee|name' ' for wrappingCol field name view commandCL[EAR]: clear the format of columnsHEA[DING] TEXT: sets column headersFOR [MAT] FORMAT: formatting column value of characters and numbers, the date is invalid, eg:column salary justify left format $999999, including justify left: col managerid format 999999999 left:The length of the restricted string has a A+ numeric limitThe number of restrictions is 9, and a few is limited to 9.NOPRINT/PRINT NOPRINT: a field is blocked from the output (returns but does not display).Col field name noprint/print.NULL if there is a NULL value, what does it show?.Col, name, null, ' on, employee'TTITLE[text/off/on] sets the header of the reportBTITLE[text/off/on] sets the end of the report When you make a report, you should first think about the size of the PAGESIZE.BREAK ON [REPORT_ELEMENT]Suppress the display of duplicate values that can only be valid with a field name, eg:选择department id, last_name从员工在rownum < 301,2顺序;打破department id5.3、做PL/SQL脚本文件的过程:变量定义接受环境变量设置集格式控制命令阀芯使用变量的SQL阀芯脱落清除格式控制重置环境变量释放变量5. 4、引用非PL / SQL变量当要在PL/SQL块中引用非PL/SQL变量时,也就是要引用PL/SQL块所在地的主机变量(或称”环境变量”)时,必须要在非PL/SQL变量前加冒号(“:”),如:“名字”,名字为非PL/SQL变量。
玩转Oracle-PLSQL定义并使用变量Oracle是一种关系型数据库管理系统,提供了一种称为PLSQL的编程语言,用于在数据库中定义和处理数据。
PLSQL具有许多功能,包括变量的定义和使用。
本文将介绍在Oracle-PLSQL中定义和使用变量的方法和注意事项。
在Oracle-PLSQL中,可以使用DECLARE语句来定义变量。
DECLARE语句用于在PLSQL块中声明一个或多个变量。
变量可以是任何合法的数据类型,例如整数、字符串、日期等。
下面是一个简单的示例:```DECLAREv_name VARCHAR2(50):='John';v_age NUMBER:=30;BEGIN--此处可以使用变量进行数据处理DBMS_OUTPUT.PUT_LINE('Name: ',v_name);DBMS_OUTPUT.PUT_LINE('Age: ',v_age);END;```在上述示例中,使用DECLARE语句定义了两个变量:v_name和v_age。
v_name是一个VARCHAR2类型的变量,v_age是一个NUMBER类型的变量。
这两个变量分别被初始化为'John'和30。
然后,可以在BEGIN和END之间使用这些变量进行数据处理。
在PLSQL中,可以使用变量进行各种操作,例如赋值、数学运算和条件判断等。
以下是一些使用变量的示例:```DECLAREv_num1 NUMBER:=10;v_num2 NUMBER:=5;v_result NUMBER;BEGIN--将两个变量相加,并将结果赋值给另一个变量v_result:=v_num1+v_num2;DBMS_OUTPUT.PUT_LINE('Sum: ',v_result);--使用IF语句根据变量的值执行不同的操作IF v_result>15 THENDBMS_OUTPUT.PUT_LINE('Result is greater than 15');ELSEDBMS_OUTPUT.PUT_LINE('Result is less than or equal to 15');ENDIF;```在上述示例中,使用变量v_num1和v_num2存储了两个数字,并使用变量v_result存储了它们的和。
Oracle SQL*PLUS基础及sqlplus命令详解-1Oracle SQL*PLUS基础Oracle的SQL*PLUS是设计所有应用系统的基础工具。
要想将应用系统设计成一个健壮的、性能优越的系统。
最关键的是要理解RDBMS的真正含义和结构,理解Oracle SQL*PLUS的特点和核心,弄清关系数据库与桌面数据库的差别。
比如理解数据的完整性、一致性、索引、视图等。
只有这样才能设计出符合Oracle特点的应用系统。
从而保证系统在提供使用后不会出现一致性、性能等问题。
§1.1 理解关系数据库系统(RDBMS)CODASYL(数据系统语言协会)是数据库任务组(Database Task Group,DBTG)创建的一种数据库标准,这是一种基于COBOL的网络数据库标准。
§1.1.1 关系模型一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,关系只是一个带有一些特殊属性的表。
所以有:l 数据的基础项是关系l 在这些表上的操作只产生关系一个关系表必须符合某些特定条件,才能成为关系模型的一部分l 储存在单元中的数据必须是原子的。
每个单元只能存储一条数据,叫信息原则(Information Principle)。
如果存储多条则违反信息原则。
特舒情况下可能需要违反信息原则。
l 储存在列下的数据必须具有相同的数据类型。
l 每一行是唯一的(没有完全相同的行)。
l 列没有顺序。
l 行没有顺序l 列有一个唯一性的名称。
关系模型的另一个是完整性原则。
它包括实体完整性原则(Entity integrity rule)和引用完整性原则(Referential integrity rule ),如:l 主键( Primary key )是能唯一标识行的一列或一组列的集合。
l 由多个列构成的主键称为连接键(Concatenated key)、组合键(Compound key ),或称作为复合键(Composity key )。
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:、&、&&、DEIFINE、VARIABLE……等等。
今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方便学习。
==================================================================================在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。
之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。
当一个sql语句提交后,oracle 会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。
而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。
绑定变量的实质就是用于替代sql语句中的常量的替代变量。
绑定变量能够使得每次提交的sql语句都完全一样。
1.sqlplus中如何使用绑定变量,可以通过variable来定义[c-sharp]view plaincopyprint?1.SQL> select * from tt where id=1;2.3.ID NAME4.---------- ----------------------------------------5. 1 test6.7.SQL> select * from tt where id=2;8.9.ID NAME10.---------- ----------------------------------------11.2 test12.13.SQL> variable i number;14.SQL> exec :i :=1;15.16.PL/SQL 过程已成功完成。
彻底理解SQL*Plus 系统变量―――By 木水鱼(Jason Sun) E-mail:sjshjz@1.APPI[NFO]{ON|OFF|text}启用或禁止通过DBMS_APPLICATION_INFO包自动注册当前会话正在执行的模块(命令文件)的名称,或者手工注册模块名称。
这可以使DBA能够监视每个模块的性能和资源使用情况。
注册的模块的名称保存在V$SESSION视图相应会话的MODULE字段中。
注册名称时实际是调用DBMS_APPLICATION_INFO.SET_MODULE存储过程。
[ON]:允许自动注册通过@、@@或START调用的命令文件的名称。
[OFF]:禁止自动注册通过@、@@或START调用的命令文件的名称。
[text]:用来手工设置当前会话正在执行的模块名称。
示例:SQL> set appinfo onSQL> @js2008.sql ---模块名将被自动注册SQL> @jz.sql ---模块名将被自动注册当APPINFO为ON时命令文件的名称是自动被注册的。
可执行下面两条语句分别查看js2008.sql模块和jz.sql模块的执行情况:SQL> select * from v$sqlarea where module like '%js2008.sql';SQL> select * from v$sqlarea where module like '%jz.sql';而当APPINFO为OFF时则不会自动注册命令文件的名称,我们可以手工注册。
SQL> set appinfo offSQL> set appinfo js2008 ---手工注册模块名SQL> @js2008.sqlSQL> set appinfo jz ---手工注册模块名SQL> @jz.sql然后执行下面两条语句分别查看js2008.sql模块和jz.sql模块的执行情况:SQL> select * from v$sqlarea where module='js2008';SQL> select * from v$sqlarea where module='jz';2.ARRAY[SIZE] {n}指示SQL*Plus一次从服务器获取多少行的数据。
n的默认值是15取值范围是1至5000。
当查询返回的数据较多时设置为较大的值可提高效率,但需占用更多的内存。
假设ARRAYSIZE设为5,而某条SQL查询将返回100行数据,则SQL*Plus需分20次才能从服务器获取到所有的数据行。
如下所示:创建一个具有100行数据的表,并设置ARRAYSIZE为5:SQL> set autotrace on ---使SQL*Plus显示统计信息SQL> create table t_temp as select * from all_objects where rownum<101;SQL> set arraysize 5查询表中所有行SQL> select * from t_temp;显示的统计信息如下:0 recursive calls9 db block gets26 consistent gets0 physical reads0 redo size15561 bytes sent via SQL*Net to client2992 bytes received via SQL*Net from client21 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)100 rows processed参看统计信息中“SQL*Net roundtrips to/from client”这行数据。
它说明了SQL*Plus需分20次从服务器获取所有数据行(加上发起查询的一次共21次)。
SQL> set arraysize 100 修改ARRAYSIZE为100SQL> select * from t_temp;显示统计信息如下:0 recursive calls9 db block gets7 consistent gets0 physical reads0 redo size13262 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)100 rows processed再参看统计信息中的“SQL*Net roundtrips to/from client”这一行,说明SQL*Plus只需1次就可以从服务器获取到所有数据行(加上发起查询的一次共2次)。
3.AUTO[COMMIT]{OFF|ON|IMM[EDIATE]|n}控制何时提交对数据库的修改。
[OFF]:禁止自动提交,因此我们必须执行COMMIT来手工提交改变。
[ON]:每执行成功一个INSERT、UPDA TE、DELETE语句或PL/SQL块后自动提交。
[IMMEDIATE]:同ON。
[n]:每执行成功n个INSERT、UPDA TE、DELETE语句或PL/SQL块后自动提交。
4.AUTOP[RINT] {OFF|ON}控制SQL*Plus是否自动显示绑定变量的值。
默认为OFF。
SQL> variable v_date char(10)SQL> set autoprint on下面PL/SQL执行成功后将自动打印出绑定变量的值。
SQL> begin2 select to_char(sysdate,'yyyy-mm-dd') into :v_date from dual;3 end;4 /PL/SQL 过程已成功完成。
V_DATE--------------------------------2007-05-215.AUTORECOVERY [ON|OFF]ON 设置RECOVER 命令自动应用恢复过程中所需要的归档重做日志文件的默认文件名。
当AUTORECOVERY 设为ON 时,不需要与用户进行交互,这时所需要的文件必须具有所期望的名称并且位于所期望的位置。
当AUTORECOVERY 设为ON 时,所使用的文件名来源于初始化参数LOG_ARCHIVE_DEST 和LOG_ARCHIVE_FORMAT 的值。
要在iSQL*Plus 中使用RECOVER 命令,必须把AUTORECOVERY 设为ON。
如果尝试在AUTORECOVERY 为OFF 时恢复数据库,将产生以下错误:SP2-0872: 在iSQL*Plus 中必须使用SET AUTORECOVERY ONOFF 是默认选项,它需要手工输入文件名或者接受所建议的默认文件名。
SET AUTORECOVERY ONRECOVER DA TABASE6.AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]控制在成功执行SQL DML语句后显示一个跟踪报表。
报表可包括一些关于执行情况的统计信息和执行计划。
默认为OFF。
[OFF]:不显示跟踪报表。
[ON]:显示跟踪报表。
设为ON或TRACEONL Y隐含包括了EXPLAIN和STATISTICS 选项。
[TRACEONL Y]:显示跟踪报表但不显示查询结果。
[EXPLAIN]:显示查询执行路径。
[STATISTICS]:显示SQL语句统计信息。
SQL> set autotrace traceonlySQL> select * from scott.dept;Execution Plan----------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE1 0 TABLE ACCESS (FULL) OF 'DEPT'Statistics----------------------------------------------------------0 recursive calls2 db block gets2 consistent gets0 physical reads0 redo size604 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)4 rows processed7.BLO[CKTERMINATOR] {OFF|ON|c}设置用于结束输入PL/SQL块的字符。
此字符不能是数字字符。
默认结束字符为“.”。
[OFF]:禁用结束字符。
[ON]:启用结束字符,并重置结束字符为“.”。
[c]:启用结束字符,并指定结束字符为所设置的字符。
修改结束字符为“!”SQL> set blockterminator !SQL> begin2 insert into;3 ! ---输入!后,块输入结束SQL> set blockterminator offSQL> begin2 insert into;3 ! ---输入!后,块输入不会结束4 !58.CMDS[EP] {c|OFF|ON}控制是否允许在一行中输入多个SQL*Plus命令。
如果为ON则还可以设置多个SQL*Plus 命令之间的分隔符,默认的分隔符为“;”。
[OFF]:禁止在一行中输入多个SQL*Plus命令。
[ON]:允许在一行中输入多个SQL*Plus命令,并设置分隔符为“;”。
[c]:允许在一行中输入多个SQL*Plus命令,并指定分隔符为所设置的字符。
SQL> set cmdsep onSQL> column e_name heading EmployeeName;column dept_name heading DepartName SQL> set cmdsep offSQL> column e_name heading EmployeeName;column dept_name heading DepartName SP2-0158: 未知的COLUMN选项"dept_name"9.COLSEP {text}设置SELECT语句返回的各列之间显示的分隔符。