网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

sql常用查询语句(1)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
oracle常用sql语句
    .执行一个SQL脚本文件
    SQL>startfile_name
    SQL>@file_name
    2.对当前的输入进行编辑
    SQL>edit
    
    3.重新运行上一次运行的sql语句
    SQL>/
    
    4.将显示的内容输出到指定文件
    SQL>SPOOLfile_name
    在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
    
    5.关闭spool输出
    SQL>SPOOLOFF
    只有关闭spool输出,才会在输出文件中看到输出的内容。
    
    6.显示一个表的结构
    SQL>desctable_name
    
    7.COL命令:
    主要格式化列的显示形式。
    该命令有许多选项,具体如下:
    COL[UMN][{column|expr}[option...]]
    Option选项可以是如下的子句:
    ALI[AS]alias
    CLE[AR]
    FOLD_A[FTER]
    FOLD_B[EFORE]
    FOR[MAT]format
    HEA[DING]text
    JUS[TIFY]{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
    LIKE{expr|alias}
    NEWL[INE]
    NEW_V[ALUE]variable
    NOPRI[NT]|PRI[NT]
    NUL[L]text
    OLD_V[ALUE]variable
    ON|OFF
    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
    
    1).改变缺省的列标题
    COLUMNcolumn_nameHEADINGcolumn_heading
    Forexample:
    Sql>select*fromdept;
    DEPTNODNAMELOC
    -----------------------------------------------
    10ACCOUNTINGNEWYORK
    sql>colLOCheadinglocation
    sql>select*fromdept;
    DEPTNODNAMElocation
    ------------------------------------------------
    10ACCOUNTINGNEWYORK
    
    2).将列名ENAME改为新列名EMPLOYEENAME并将新列名放在两行上:
    Sql>select*fromemp
    DepartmentnameSalary
    ------------------------------
    10aaa11
    SQL>COLUMNENAMEHEADING’Employee|Name’
    Sql>select*fromemp
    Employee
    DepartmentnameSalary
    ------------------------------
    10aaa11
    note:thecolheadingturnintotwolinesfromoneline.
    
    3).改变列的显示长度:
    FOR[MAT]format
    Sql>selectempno,ename,jobfromemp;
    EMPNOENAMEJOB
    -----------------------------
    7369SMITHCLERK
    7499ALLENSALESMAN
    7521WARDSALESMAN
    Sql>colenameformata40
    EMPNOENAMEJOB
    -----------------------------------------------------------
    7369SMITHCLERK
    7499ALLENSALESMAN
    7521WARDSALESMAN
    
    4).设置列标题的对齐方式
    JUS[TIFY]{L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
    SQL>colenamejustifycenter
    SQL>/
    EMPNOENAMEJOB
    -----------------------------------------------------------
    7369SMITHCLERK
    7499ALLENSALESMAN
    7521WARDSALESMAN
    对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边
    
    5).不让一个列显示在屏幕上
    NOPRI[NT]|PRI[NT]
    SQL>coljobnoprint
    SQL>/
    EMPNOENAME
    --------------------------------------------------
    7369SMITH
    7499ALLEN
    7521WARD
    
    6).格式化NUMBER类型列的显示:
    SQL>COLUMNSALFORMAT$99,990
    SQL>/
    Employee
    DepartmentNameSalaryCommission
    ---------------------------------------
    30ALLEN$1,600300
    
    7).显示列值时,如果列值为NULL值,用text值代替NULL值
    COMMNUL[L]text
    SQL>COLCOMMNUL[L]text
    
    8).设置一个列的回绕方式
    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
    COL1
    --------------------
    HOWAREYOU?
    
    SQL>COLCOL1FORMATA5
    SQL>COLCOL1WRAPPED
    COL1
    -----
    HOWA
    REYO
    U?
    
    SQL>COLCOL1WORD_WRAPPED
    COL1
    -----
    HOW
    ARE
    YOU?
    
    SQL>COLCOL1WORD_WRAPPED
    COL1
    -----
    HOWA
    
    9).显示列的当前的显示属性值
    SQL>COLUMNcolumn_name
    
    10).将所有列的显示属性设为缺省值
    SQL>CLEARCOLUMNS
    
    8.屏蔽掉一个列中显示的相同的值
    BREAKONbreak_column
    SQL>BREAKONDEPTNO
    SQL>SELECTDEPTNO,ENAME,SAL
    FROMEMP
    WHERESAL<2500
    ORDERBYDEPTNO;
    DEPTNOENAMESAL
    ------------------------------
    10CLARK2450
    MILLER1300
    20SMITH800
    ADAMS1100
    
    9.在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。
    BREAKONbreak_columnSKIPn
    
    SQL>BREAKONDEPTNOSKIP1
    SQL>/
    DEPTNOENAMESAL
    ------------------------------
    10CLARK2450
    MILLER1300
    
    20SMITH800
    ADAMS1100
    
    10.显示对BREAK的设置
    SQL>BREAK
    
    11.删除6、7的设置
    SQL>CLEARBREAKS
    
    12.Set命令:
    该命令包含许多子命令:
    SETsystem_variablevalue
    system_variablevalue可以是如下的子句之一:
    APPI[NFO]{ON|OFF|text}
    ARRAY[SIZE]{15|n}
    AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
    AUTOP[RINT]{ON|OFF}
    AUTORECOVERY[ON|OFF]
    AUTOT[RACE]{ON|OFF|TRACE[ONLY]}[EXP[LAIN]][STAT[ISTICS]]
    BLO[CKTERMINATOR]{.|c}
    CMDS[EP]{;|c|ON|OFF}
    COLSEP{_|text}
    COM[PATIBILITY]{V7|V8|NATIVE}
    CON[CAT]{.|c|ON|OFF}
    COPYC[OMMIT]{0|n}
    COPYTYPECHECK{ON|OFF}
    DEF[INE]{&;|c|ON|OFF}
    DESCRIBE[DEPTH{1|n|ALL}][LINENUM{ON|OFF}][INDENT{ON|OFF}]
    ECHO{ON|OFF}
    EDITF[ILE]file_name[.ext]
    EMB[EDDED]{ON|OFF}
    ESC[APE]{\|c|ON|OFF}
    FEED[BACK]{6|n|ON|OFF}
    FLAGGER{OFF|ENTRY|INTERMED[IATE]|FULL}
    FLU[SH]{ON|OFF}
    HEA[DING]{ON|OFF}
    HEADS[EP]{||c|ON|OFF}
    INSTANCE[instance_path|LOCAL]
    LIN[ESIZE]{80|n}
    LOBOF[FSET]{n|1}
    LOGSOURCE[pathname]
    LONG{80|n}
    LONGC[HUNKSIZE]{80|n}
    MARK[UP]HTML[ON|OFF][HEADtext][BODYtext][ENTMAP{ON|OFF}][SPOOL
    {ON|OFF}][PRE[FORMAT]{ON|OFF}]
    NEWP[AGE]{1|n|NONE}
    NULLtext
    NUMF[ORMAT]format
    NUM[WIDTH]{10|n}
    PAGES[IZE]{24|n}
    PAU[SE]{ON|OFF|text}
    RECSEP{WR[APPED]|EA[CH]|OFF}
    RECSEPCHAR{_|c}
    SERVEROUT[PUT]{ON|OFF}[SIZEn][FOR[MAT]{WRA[PPED]|WOR[D_
    WRAPPED]|TRU[NCATED]}]
    SHIFT[INOUT]{VIS[IBLE]|INV[ISIBLE]}
    SHOW[MODE]{ON|OFF}
    SQLBL[ANKLINES]{ON|OFF}
    SQLC[ASE]{MIX[ED]|LO[WER]|UP[PER]}
    SQLCO[NTINUE]{>|text}
    SQLN[UMBER]{ON|OFF}
    SQLPRE[FIX]{#|c}
    SQLP[ROMPT]{SQL>|text}
    SQLT[ERMINATOR]{;|c|ON|OFF}
    SUF[FIX]{SQL|text}
    TAB{ON|OFF}
    TERM[OUT]{ON|OFF}
    TI[ME]{ON|OFF}
    TIMI[NG]{ON|OFF}
    TRIM[OUT]{ON|OFF}
    TRIMS[POOL]{ON|OFF}
    UND[ERLINE]{-|c|ON|OFF}
    VER[IFY]{ON|OFF}
    WRA[P]{ON|OFF}
    
    1).设置当前session是否对修改的数据进行自动提交
    SQL>SETAUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
    
    2).在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
    SQL>SETECHO{ON|OFF}
    
    3).是否显示当前sql语句查询或修改的行数
    SQL>SETFEED[BACK]{6|n|ON|OFF}
    默认只有结果大于6行时才显示结果的行数。如果setfeedback1,则不管查询到多少行都返回。当为off时,一律不显示查询的行数
    
    4).是否显示列标题
    SQL>SETHEA[DING]{ON|OFF}
    当setheadingoff时,在每页的上面不显示列标题,而是以空白行代替
    
    5).设置一行可以容纳的字符数
    SQL>SETLIN[ESIZE]{80|n}
    如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。
    
    6).设置页与页之间的分隔
    SQL>SETNEWP[AGE]{1|n|NONE}
    当setnewpage0时,会在每页的开头有一个小的黑方框。
    当setnewpagen时,会在页和页之间隔着n个空行。
    当setnewpagenone时,会在页和页之间没有任何间隔。
    
    7).显示时,用text值代替NULL值
    SQL>SETNULLtext
    
    8).设置一页有多少行数
    SQL>SETPAGES[IZE]{24|n}
    如果设为0,则所有的输出内容为一页并且不显示列标题
    
    9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。
    SQL>SETSERVEROUT[PUT]{ON|OFF}
    在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。
    
    10).当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
    SQL>SETWRA[P]{ON|OFF}
    当输出的行的长度大于设置的行的长度时(用setlinesizen命令设置),当setwrapon时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
    
    11).是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
    SQL>SETTERM[OUT]{ON|OFF}
    在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置settermspooloff后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
    
    12).将SPOOL输出中每行后面多余的空格去掉
    SQL>SETTRIMS[OUT]{ON|OFF}
    
    13)显示每个sql语句花费的执行时间
    setTIMING{ON|OFF}
    14).遇到空行时不认为语句已经结束,从后续行接着读入。
    SETSQLBLANKLINESON
    Sql*plus中,不允许sql语句中间有空行,这在从其它地方拷贝脚本到sql*plus中执行时很麻烦.比如下面的脚本:
    selectdeptno,empno,ename
    fromemp
    whereempno='7788';
    如果拷贝到sql*plus中执行,就会出现错误。这个命令可以解决该问题
    15).设置DBMS_OUTPUT的输出
    SETSERVEROUTPUTONBUFFER20000
    用dbms_output.put_line('strin_content');可以在存储过程中输出信息,对存储过程进行调试
    如果想让dbms_output.put_line('abc');的输出显示为:
    SQL>abc,而不是SQL>abc,则在SETSERVEROUTPUTON后加formatwrapped参数。
    16).输出的数据为html格式
    setmarkuphtml
    在8.1.7版本(也许是816?不太确定)以后,sql*plus中有一个setmarkuphtml的命令,可以将sql*plus的输出以html格式展现.
    注意其中的spoolon,当在屏幕上输出的时候,我们看不出与不加spoolon有什么区别,但是当我们使用spoolfilename输出到文件的时候,会看到spool文件中出现了等tag.
    14.修改sqlbuffer中的当前行中,第一个出现的字符串
    C[HANGE]/old_value/new_value
    SQL>l
    1*select*fromdept
    SQL>c/dept/emp
    1*select*fromemp
    
    15.编辑sqlbuffer中的sql语句
    EDI[T]
    
    16.显示sqlbuffer中的sql语句,listn显示sqlbuffer中的第n行,并使第n行成为当前行
    L[IST][n]
    
    17.在sqlbuffer的当前行下面加一行或多行
    I[NPUT]
    
    18.将指定的文本加到sqlbuffer的当前行后面
    A[PPEND]
    SQL>selectdeptno,
    2dname
    3fromdept;
    DEPTNODNAME
    ------------------------
    10ACCOUNTING
    20RESEARCH
    30SALES
    40OPERATIONS
    
    SQL>L2
    2*dname
    SQL>a,loc
    2*dname,loc
    SQL>L
    1selectdeptno,
    2dname,loc
    3*fromdept
    SQL>/
    
    DEPTNODNAMELOC
    -------------------------------------
    10ACCOUNTINGNEWYORK
    20RESEARCHDALLAS
    30SALESCHICAGO
    40OPERATIONSBOSTON
    
    19.将sqlbuffer中的sql语句保存到一个文件中
    SAVEfile_name
    
    20.将一个文件中的sql语句导入到sqlbuffer中
    GETfile_name
    
    21.再次执行刚才已经执行的sql语句
    RUN
    or
    /
    
    22.执行一个存储过程
    EXECUTEprocedure_name
    
    23.在sql*plus中连接到指定的数据库
    CONNECTuser_name/passwd@db_alias
    
    24.设置每个报表的顶部标题
    TTITLE
    
    25.设置每个报表的尾部标题
    BTITLE
    
    26.写一个注释
    REMARK[text]
    
    27.将指定的信息或一个空行输出到屏幕上
    PROMPT[text]
    
    28.将执行的过程暂停,等待用户响应后继续执行
    PAUSE[text]
    
    Sql>PAUSEAdjustpaperandpressRETURNtocontinue.
    
    29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)
    COPY{FROMdatabase|TOdatabase|FROMdatabaseTOdatabase}
    {APPEND|CREATE|INSERT|REPLACE}destination_table
    [(column,column,column,...)]USINGquery
    
    sql>COPYFROMSCOTT/TIGER@HQTOJOHN/CHROME@WEST
    createemp_temp
    USINGSELECT*FROMEMP
    
    30.不退出sql*plus,在sql*plus中执行一个操作系统命令:
    HOST
    
    Sql>hosthostname
    该命令在windows下可能被支持。
    
    31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回sql*plus:
    !
    
    sql>!
    $hostname
    $exit
    sql>
    
    该命令在windows下不被支持。
    
    32.显示sql*plus命令的帮助
    HELP
    如何安装帮助文件:
    Sql>@?\sqlplus\admin\help\hlpbld.sql?\sqlplus\admin\help\helpus.sql
    Sql>helpindex
    
    33.显示sql*plus系统变量的值或sql*plus环境变量的值
    Syntax
    SHO[W]option
    whereoptionrepresentsoneofthefollowingtermsorclauses:
    system_variable
    ALL
    BTI[TLE]
    ERR[ORS][{FUNCTION|PROCEDURE|PACKAGE|PACKAGEBODY|
    TRIGGER|VIEW|TYPE|TYPEBODY}[schema.]name]
    LNO
    PARAMETERS[parameter_name]
    PNO
    REL[EASE]
    REPF[OOTER]
    REPH[EADER]
    SGA
    SPOO[L]
    SQLCODE
    TTI[TLE]
    USER
    
    1).显示当前环境变量的值:
    Showall
    
    2).显示当前在创建函数、存储过程、触发器、包等对象的错误信息
    Showerror
    当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
    
    3).显示初始化参数的值:
    showPARAMETERS[parameter_name]
    
    4).显示数据库的版本:
    showREL[EASE]
    
    5).显示SGA的大小
    showSGA
    
    6).显示当前的用户名
    showuser
    34.查询一个用户下的对象
    SQL>select*fromtab;
    SQL>select*fromuser_objects;
    35.查询一个用户下的所有的表
    SQL>select*fromuser_tables;
    36.查询一个用户下的所有的索引
    SQL>select*fromuser_indexes;
    37.定义一个用户变量
    方法有两个:
    a.define
    b.COL[UMN][{column|expr}NEW_V[ALUE]variable[NOPRI[NT]|PRI[NT]]
    OLD_V[ALUE]variable[NOPRI[NT]|PRI[NT]]
    下面对每种方式给予解释:
    a.Syntax
    DEF[INE][variable]|[variable=text]
    定义一个用户变量并且可以分配给它一个CHAR值。
    assignthevalueMANAGERtothevariablePOS,type:
    SQL>DEFINEPOS=MANAGER
    assigntheCHARvalue20tothevariableDEPTNO,type:
    SQL>DEFINEDEPTNO=20
    listthedefinitionofDEPTNO,enter
    SQL>DEFINEDEPTNO
    ―――――――――――――――
    DEFINEDEPTNO=”20”(CHAR)
    定义了用户变量POS后,就可以在sql*plus中用&;POS或&;&;POS来引用该变量的值,sql*plus不会再提示你给变量输入值。
    b.COL[UMN][{column|expr}NEW_V[ALUE]variable[NOPRI[NT]|PRI[NT]]
    NEW_V[ALUE]variable
    指定一个变量容纳查询出的列值。
    例:columncol_namenew_valuevar_namenoprint
    selectcol_namefromtable_namewhere……..
    将下面查询出的col_name列的值赋给var_name变量.
    一个综合的例子:
    得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):
    columnredo_writesnew_valuecommit_count
    selectsum(stat.value)redo_writes
    fromv$sesstatstat,v$statnamesn
    wherestat.statistic#=sn.statistic#
    andsn.name='usercommits';
    --等待一会儿(此处为10秒);
    executedbms_lock.sleep(10);
    setverioff
    selectsum(stat.value)-&;commit_countcommits_added
    fromv$sesstatstat,v$statnamesn
    wherestat.statistic#=sn.statistic#
    andsn.name='usercommits';
    38.定义一个绑定变量
    VAR[IABLE][variable[NUMBER|CHAR|CHAR(n)|NCHAR|NCHAR(n)|VARCHAR2(n)|NVARCHAR2(n)|CLOB|NCLOB|REFCURSOR]]
    定义一个绑定变量,该变量可以在pl/sql中引用。
    可以用print命令显示该绑定变量的信息。
    如:
    columninst_numheading"InstNum"new_valueinst_numformat99999;
    columninst_nameheading"Instance"new_valueinst_nameformata12;
    columndb_nameheading"DBName"new_valuedb_nameformata12;
    columndbidheading"DBId"new_valuedbidformat9999999999justc;
    prompt
    promptCurrentInstance
    prompt~~~~~~~~~~~~~~~~
    selectd.dbiddbid
    ,d.namedb_name
    ,i.instance_numberinst_num
    ,i.instance_nameinst_name
    fromv$databased,
    v$instancei;
    variabledbidnumber;
    variableinst_numnumber;
    begin
    :dbid:=&;dbid;
    :inst_num:=&;inst_num;
    end;
    /
    说明:
    在sql*plus中,该绑定变量可以作为一个存储过程的参数,也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值,可以用print命令
    注意:
    绑定变量不同于变量:
    1.定义方法不同
    2.引用方法不同
    绑定变量::variable_name
    变量:&;variable_nameor&;&;variable_name
    3.在sql*plus中,可以定义同名的绑定变量与用户变量,但是引用的方法不同。
    39.&;与&;&;的区别
    &;用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
    &;&;用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&;&;命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
    如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
    selectcount(*)fromempwheredeptno=&;&;deptnoval;
    selectcount(*)fromempwheredeptno=&;&;deptnoval;
    selectcount(*)fromempwheredeptno=&;&;deptnoval;
    40.在输入sql语句的过程中临时先运行一个sql*plus命令(摘自itpub)
    #
    有没有过这样的经历?在sql*plus中敲了很长的命令后,突然发现想不起某个列的名字了,如果取消当前的命令,待查询后再重敲,那太痛苦了.当然你可以另开一个sql*plus窗口进行查询,但这里提供的方法更简单.
    比如说,你想查工资大于4000的员工的信息,输入了下面的语句:
    SQL>selectdeptno,empno,ename
    2fromemp
    3where
    这时,你发现你想不起来工资的列名是什么了.
    这种情况下,只要在下一行以#开头,就可以执行一条sql*plus命令,执行完后,刚才的语句可以继续输入
    SQL>>selectdeptno,empno,ename
    2fromemp
    3where
    6#descemp
    NameNull?Type
    ---------------------------------------------------------------
    EMPNONOTNULLNUMBER(4)
    ENAMEVARCHAR2(10)
    JOBVARCHAR2(9)
    MGRNUMBER(4)
    HIREDATEDATE
    SALNUMBER(7,2)
    COMMNUMBER(7,2)
    DEPTNONUMBER(2)
    6sal>4000;
    DEPTNOEMPNOENAME
    ------------------------------
    107839KING
    41.SQLPlus中的快速复制和粘贴技巧(摘自cnoug.org)
    1)鼠标移至想要复制内容的开始
    2)用右手食指按下鼠标左键
    3)向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样
    4)内容选取完毕后(所选内容全部反显),鼠标左键按住不动,用右手中指按鼠标右键
    5)这时,所选内容会自动复制到SQL*Plus环境的最后一行
    Sql*plus中蕴藏着好多技巧,如果掌握这些技巧,对于在oracle数据库下进行快速开发与有效维护数据库都是有益的。
    下面就接受一二,
    
    1.使用SQL*PLUS动态生成批量脚本
    将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。
    例1:
    生成一个脚本,删除SCOTT用户下的所有的表:
    a.创建gen_drop_table.sql文件,包含如下语句:
    SPOOLc:\drop_table.sql
    SELECT'DROPTABLE'||table_name||';'FROMuser_tables;
    SPOOLOFF
    b.以SCOTT用户登录数据库
    SQLPLUS>@…..\gen_dorp_table.sql
    c.在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:
    SQL>SELECT'DROPTABLE'||table_name||';'FROMuser_tables;
    
    'DROPTABLE'||TABLE_NAME||';'
    --------------------------------------------------------------------------------
    DROPTABLEDEPT;
    DROPTABLEEMP;
    DROPTABLEPARENT;
    DROPTABLESTAT_VENDER_TEMP;
    DROPTABLETABLE_FORUM;
    
    5rowsselected.
    
    SQL>SPOOLOFF
    d.对生成的drop_table.sql文件进行编辑去掉不必要的部分,只留下droptable…..语句
    e.在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。
    SQLPLUS>@c:\dorp_table.sql
    在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的sql语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的操作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。
    a.创建gen_drop_table.sql文件,包含如下语句:
    setechooff
    setfeedbackoff
    setnewpagenone
    setpagesize5000
    setlinesize500
    setverifyoff
    setpagesize0
    settermoff
    settrimson
    setlinesize600
    setheadingoff
    settimingoff
    setverifyoff
    setnumwidth38
    SPOOLc:\drop_table.sql
    SELECT'DROPTABLE'||table_name||';'FROMuser_tables;
    SPOOLOFF
    b.以SCOTT用户登录数据库
    SQLPLUS>@…..\gen_dorp_table.sql
    c.在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:
    DROPTABLEDEPT;
    DROPTABLEEMP;
    DROPTABLEPARENT;
    DROPTABLESTAT_VENDER_TEMP;
    DROPTABLETABLE_FORUM;
    d.在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。
    SQLPLUS>@c:\dorp_table.sql
    2.将一个表中的数据导出生成一个文本文件,列与列之间以”,”隔开
    setechooff
    setfeedbackoff
    setnewpagenone
    setpagesize5000
    setlinesize500
    setverifyoff
    setpagesize0
    settermoff
    settrimson
    setlinesize600
    setheadingoff
    settimingoff
    setverifyoff
    setnumwidth38
    SPOOLc:\drop_table.sql
    selectDEPTNO||','||DNAMEFROMDEPT;
    SPOOLOFF
    将上面的内容保存为一个文本文件后,以scott登录,执行该文件后显示结果:
    10,ACCOUNTING
    20,RESEARCH
    30,SALES
    40,OPERATIONS
    通过上面的两个例子,我们可以将:
    setechooff
    setfeedbackoff
    setnewpagenone
    setpagesize5000
    setlinesize500
    setverifyoff
    setpagesize0
    settermoff
    settrimson
    setlinesize600
    setheadingoff
    settimingoff
    setverifyoff
    setnumwidth38
    SPOOLc:\具体的文件名
    你要运行的sql语句
    SPOOLOFF
    作为一个模版,只要将必要的语句假如这个模版就可以了。
    在oracle的较新版本中,还可以用setcolsep命令来实现上面的功能:
    SQL>setcolsep,
    SQL>select*fromdept;
    10,ACCOUNTING,NEWYORK
    20,RESEARCH,DALLAS
    30,SALES,CHICAGO
    40,OPERATIONS,BOSTON
    35,aa,bb
    3.动态生成spool命令所需的文件名
    在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要每天spool一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢?
    columndat1new_valuefilename;
    selectto_char(sysdate,'yyyymmddhh24mi')dat1fromdual;
    spoolc:\&;&;filename..txt
    select*fromdept;
    spooloff;
    4.如何从脚本文件中得到WINDOWS环境变量的值:
    在windos中:
    spoolc:\temp\%ORACLE_SID%.txt
    select*fromdept;
    ...
    spooloff
    在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt
    在UNIX中:
    spoolc:\temp\$ORACLE_SID.txt
    select*fromdept;
    ...
    spooloff
    在上面的例子中,通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt
    5.如何指定缺省的编辑脚本的目录
    在sql*plus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?
    通过SQL>seteditfilec:\temp\file.sql命令,可以设置其缺省目录为c:\tmpe,缺省文件名为file.sql。
    6.如何除去表中相同的行
    找到相同的行:
    SELECT*FROMdepta
    WHEREROWID<>(SELECTMAX(ROWID)
    FROMdeptb
    WHEREa.deptno=b.deptno
    ANDa.dname=b.dname--Makesureallcolumnsarecompared
    ANDa.loc=b.loc);
    注释:
    如果只找deptno列相同的行,上面的查询可以改为:
    SELECT*FROMdepta
    WHEREROWID<>(SELECTMAX(ROWID)
    FROMdeptb
    WHEREa.deptno=b.deptno)
    删除相同的行:
    DELETEFROMdepta
    WHEREROWID<>(SELECTMAX(ROWID
    FROMdeptb
    WHEREa.deptno=b.deptno
    ANDa.dname=b.dname--Makesureallcolumnsarecompared
    ANDa.loc=b.loc);
    注意:上面并不删除列值为null的行。
    7.如何向数据库中插入两个单引号(’’)
    Insertinotdeptvalues(35,’aa’’’’bb’,’a’’b’);
    在插入时,用两个’表示一个’。
    8.如何设置sql*plus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。设置SQLPATH环境变量。
    如:
    SQLPATH=C:\ORANT\DBS;C:\APPS\SCRIPTS;C:\MYSCRIPTS
    9.@与@@的区别是什么?
    @等于start命令,用来运行一个sql脚本文件。
    @命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。
    @@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。
    10.&;与&;&;的区别
    &;用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
    &;&;用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&;&;命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
    如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    selectcount(*)fromempwheredeptno=&;deptnoval;
    11.引入copy的目的
    Copy命令在两个数据库之间拷贝数据时特别有用,特别是该命令可以在两个数据库之间传递long型字段的数据。
    缺点:
    在两个数据库之间传递数据时,有可能丢失精度(loseprecision)。
    12.问什么在修改大量的行时,我的脚本会变得很慢?
    当通过PL/SQL块修改一个表中的许多行时,你会创建在表上创建一个cursor,但是只有在你关闭cursor时,才会释放ROLLBACKSEGMENT,这样,当cursor仍然打开时,修改过程会变慢,这是因为数据库不得不搜寻大量的rollbacksegment以便于维护读一致性。为了避免这样情况,试着在表上加一个标志字段来描述该行是否已经被修改,然后关闭该cursor,然后再打开该cursor。每次可以修改5000行
    
  • 上一篇资讯: sql常用查询语句
  • 下一篇资讯: sql常用查询
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师