精华内容
下载资源
问答
  • 昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程。首先看下使用pl/sql怎么导出存储过程。导出步骤:tools-->Export User Objects...-->选择存储过程(Procedure,Function,Trigger,Type,Type Body...

    昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程。

    首先看下使用pl/sql怎么导出存储过程。

    导出步骤:

    tools-->Export User Objects...-->选择存储过程(Procedure,Function,Trigger,Type,Type Body,Package)等-->在Output File选择导出位置-->Export

    0818b9ca8b590ca3270a3433284dd417.png     

    0818b9ca8b590ca3270a3433284dd417.png     使用上述步骤可以导出表,序列,存储过程,函数,触发器,Type,包等,导出结果为:

    0818b9ca8b590ca3270a3433284dd417.png     导出后,怎么使用pl/sql导入呢?步骤如下:

    tools-->Import Tables-->选择标签页SQL Inserts-->在Import File中选择Sql文件位置-->Import

    0818b9ca8b590ca3270a3433284dd417.png       

    0818b9ca8b590ca3270a3433284dd417.png     不使用pl/sql怎么导出存储过程呢?

    参考了文章:http://bijian1013.iteye.com/blog/1830406

    一般用户导出存储过程脚本为:

    SET echo off;

    SET heading off;

    SET feedback off;

    spool f:/saveFile/tmp/my_proc.sql;

    select text from user_source;

    spool off;

    Sys用户导出存储过程脚本为:

    SET echo off;

    SET heading off;

    SET feedback off;

    spool f:/saveFile/tmp/tmd_proc.sql;

    select text from dba_source where owner= 'TMD' and type = 'PROCEDURE';

    spool off;

    导出发现三次导出的文件大小不一致,第二次普通用户spool导出的文件最大,怀疑是select时候没带条件导出来其他的Type,Trigger之类的数据,下面开始测试看下有那些类型:

    系统Sys用户:

    select distinct type from dba_source

    结果为:

    0818b9ca8b590ca3270a3433284dd417.png

    普通用户TMD:

    select distinct type from user_source

    结果为:

    0818b9ca8b590ca3270a3433284dd417.png     可见类型有PROCEDURE,PACKAGE,PACKAGE BODY,TYPE BODY,TRIGGER,FUNCTION,TYPE,第二次导出没带Type参数导致导出结果不准确:

    只导出存储过程正确的方法为:

    SET echo off;

    SET heading off;

    SET feedback off;

    spool f:/saveFile/tmp/my_proc2.sql;

    select text from user_source where type = 'PROCEDURE';

    spool off;

    使用pl/sql导出的数据(如存储过程)是带用户名的,上面写的使用spool是不带用户名的。

    导出结果和Sys用户导出结果比对,结果为:

    0818b9ca8b590ca3270a3433284dd417.png     结果很正确,想要导什么数据,把Type修改下就OK了,表除外。举个例子

    普通用户导出Type,和Type Body

    SET echo off;

    SET heading off;

    SET feedback off;

    spool f:/saveFile/tmp/my_type.sql;

    select text from user_source where type in('TYPE BODY','TYPE');

    spool off;

    结果为:

    0818b9ca8b590ca3270a3433284dd417.png

    另一种导出存储过程的脚本,参考了文章:

    http://stackoverflow.com/questions/710290/oracle-exporting-procedures-packages-to-a-file

    SET pages 0

    spool f:/saveFile/tmp/c/my_procedure_2.sql

    SELECT

    CASE line

    WHEN 1 THEN

    'CREATE OR REPLACE ' || TYPE || ' ' || NAME || CHR(10) || text

    ELSE

    text

    END

    FROM user_source

    WHERE TYPE ='PROCEDURE'

    ORDER BY name, line;

    spool OFF

    exit

    和上面那个没什么区别。

    眼尖的朋友可能看出来了,如果我想导出视图怎么办呢,上面的类型中可是没有VIEW这一类的。

    使用pl/sql导出是一种方法:

    0818b9ca8b590ca3270a3433284dd417.png     没有像上面的从数据库中select出来呢?

    网上说可以使用:

    select dbms_metadata.get_ddl('VIEW','VW_TB_A','TMD') from dual;

    可是我的直接报错了,如下:

    0818b9ca8b590ca3270a3433284dd417.png    网上的解决方法是:

    以sysdba用户登陆以后执行以下语句:

    exec dbms_metadata_util.load_stylesheets;

    可是我的直接报错:

    0818b9ca8b590ca3270a3433284dd417.png     电脑上rdbms下面根本没有xml文件夹:

    0818b9ca8b590ca3270a3433284dd417.png      自己也找了很久的资料,一直没解决,可能是数据库版本太低所致,可能性较大的是我的数据库出现问题了。

    晚上重装了数据库,果然是数据库有问题,现在使用

    select dbms_metadata.get_ddl('VIEW','VW_TB_A','TMD') from dual;

    已经可以正确的得到结果了,如下:

    0818b9ca8b590ca3270a3433284dd417.png      打开CLOB可以看到:

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • oracleFUNCTION拙见

    千次阅读 2014-03-25 23:20:37
    oraclefunction: 1、如何定义 2、调用方式 3、在function中使用utl_dbws调用webservice

    一、介绍

    函数(Function)为一命名的存储程序,可带参数(有无均可),有返回值

    函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。

    函数说明要指定函数名、返回值的类型,以及参数类型等,如CREATE OR REPLACE FUNCTION access_hel_by_dbws(username in varchar2) RETURN VARCHAR2

    二、语法

    CREATE [OR REPLACE] FUNCTION 函数名(参数列表)  -- 参数类型与函数返回值类型不用标注类型大小,即varchar2即可
     RETURN  函数值类型
    AS
    PLSQL子程序体;

    三、简单例子:计算两个数字的和

    3.1、函数定义

    CREATE OR REPLACE FUNCTION add_numbers(d1 in number, d2 in number) -- 函数声明,包括名称、参数名称及类型
      return number -- 返回值类型声明
    as -- 或者写作is,均可
    begin -- begin与end中间为pl sql 代码块,可执行查询、插入、更新、删除操作
      return d1+d2; -- return子句返回两数字之和
    end;
    
    如何执行上述代码建立函数?当做sql语句在sql window(pl sql)窗口里执行即可,或者其他客户端相应执行sql语句的窗口

    3.2、调用方式

    (1)、执行sql查询语句

    select add_numbers(1,2) from dual;

    (2)、执行pl sql代码块

    以pl sql客户端为例,打开sql window,在sql栏里粘贴如下代码,在output一栏里即可看到结果

    declare -- declare部分可有可无,若无变量需要声明,则可去掉,只留begin、end
      sum_ number;
    begin
      sum_:=add_numbers(1,2);
      dbms_output.put_line('sum is:' || sum_);
    end;
    
    截图如下:

    (3)、在触发器,存储过程中均可调用函数,即在pl sql代码块范围内、sql语句中均可调用。

    (4)、在java程序中调用存储函数

    package zxn.function.test;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class Test {
    	public static void main(String[] args) throws SQLException {
    		/**
    		 * jdbc方式连接oracle数据库
    		 */
    		Connection connection = null;  
            try {  
               Class.forName("oracle.jdbc.driver.OracleDriver");  
               String url = "jdbc:oracle:thin:@localhost:1521:orcl";  
               String user = "sys as sysdba";  
               String pwd = "orcl";           
               connection = DriverManager.getConnection(url,user,pwd);  
           } catch (ClassNotFoundException e) {  
               e.printStackTrace();  
           } catch (SQLException e) {  
               e.printStackTrace();  
           }  
           /** 调用oracle函数 */
           CallableStatement callableStatement=connection.prepareCall("{?=call add_numbers(?, ?)}");
           /** 设置第一个问号占位符的类型,第一个问号表示函数输出结果 ,顺序从1开始 */
           callableStatement.registerOutParameter(1, oracle.jdbc.OracleTypes.NUMERIC);
           /** 设置第二个参数与第三个参数的类型及值,即设置两个加数 */
           callableStatement.setDouble(2, 3.6566);
           callableStatement.setDouble(3, 3);
           /** 执行存储函数 */
           callableStatement.execute();  
           /** 得到函数执行结果 */
           System.out.println(callableStatement.getString(1));
    	}
    }
    


    4、复杂例子:在存储函数中使用UTL_DBWS调用webservice

    4、1前提是oracle数据库导入utl_dbws包,并能正常使用。

    CREATE OR REPLACE FUNCTION access_hello_by_dbws(username in varchar2, age in integer)
    RETURN VARCHAR2
    AS
    l_service  UTL_DBWS.service; -- 定义service服务
    l_call     UTL_DBWS.call; -- 定义调用对象
    l_wsdl_url         VARCHAR2(32767);
    l_namespace        VARCHAR2(32767);
    l_service_qname    UTL_DBWS.qname;
    l_port_qname       UTL_DBWS.qname;
    l_operation_qname  UTL_DBWS.qname;
    request sys.XMLTYPE; -- 响应xml
    response sys.XMLTYPE; -- 请求xml
    
    BEGIN
    l_wsdl_url        := 'http://localhost:7878/hello?wsdl'; -- webservice服务的wsdl地址
    l_namespace       := 'http://test.xiangnan.it/'; -- targetNamespace属性的值,最后的/不能少,否则报...does not contains port...
    
    l_service_qname   := UTL_DBWS.to_qname(l_namespace, 'HelloWorldService'); -- service节点name属性值
    l_port_qname      := UTL_DBWS.to_qname(l_namespace, 'HelloWorldPort'); -- port节点name属性值
    l_operation_qname := UTL_DBWS.to_qname(l_namespace, 'hello'); -- operation节点name属性值
    
    l_service := UTL_DBWS.create_service ( -- 根据wsdl与service name创建service对象
    wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
    service_name           => l_service_qname);
    
    l_call := UTL_DBWS.create_call ( -- 创建调用对象
    service_handle => l_service,
    port_name      => l_port_qname,
    operation_name => l_operation_qname);
    
    sys.utl_dbws.set_target_endpoint_address(l_call, 'http://localhost:7878/hello'); -- 设置调用对象的endpoint,也可不设置,
    -- 该属性可通过soap UI查看
    
    request := sys.XMLTYPE('<test:hello   xmlns:test="http://test.xiangnan.it/"> -- 拼接request,可通过soap ui查看request进行拼接
                                <arg0>'||username||'</arg0> -- ||||之间为定义的变量
                                <arg1>'||age||'</arg1>
                                </test:hello>
                                ');
                  
    response := utl_dbws.invoke(l_call, request); -- 发出请求,并接受响应
    
    UTL_DBWS.release_call (call_handle => l_call); -- 释放call对象
    UTL_DBWS.release_service (service_handle => l_service); -- 释放service对象
    -- 获取响应值,可通过soap ui查看response内容
    return response.extract('/ns2:helloResponse/return/text()', ' xmlns:ns2="http://test.xiangnan.it/"').getstringval();
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(sqlerrm); -- 输出错误
        return sqlerrm;
    END;
    
    
    
    

    4.2、测试

    在pl sql 中functions列表下面,选中定义的函数,右键点击,选择Test,如图:


    输入对应的测试参数,得到结果,如图:



    展开全文
  • Oracle导入Jar并运行

    2019-08-13 16:48:31
    Oracle导入Jar并创建函数运行。 计算两个数的和 1、idea创建maven项目 File->New->Project…->Maven 创建包cays.sum和cays.add SumNumber.java package cays.sum; /** * 计算数的和 * * @author Chai ...

    Oracle导入Jar并创建函数运行。
    计算两个数的和

    1、idea创建maven项目

    File->New->Project…->Maven

    创建包cays.sumcays.add

    SumNumber.java

    package cays.sum;
    
    /**
     * 计算数的和
     *
     * @author Chai yansheng
     * @create 2019-08-13 16:22
     **/
    public class SumNumber {
        public static int sumTwoNum(int a, int b) {
            return a + b;
        }
    }
    
    

    AddNumber.java

    package cays.add;
    
    /**
     * 两个数的加法
     *
     * @author Chai yansheng
     * @create 2019-08-13 16:24
     **/
    public class AddNumber {
        public static int addTwoInt(int a, int b) {
            return a + b;
        }
    }
    
    

    2、打包成jar

    View->Tool Windows->Maven Project->Lifecycle->package->run

    或者项目根目录下mvn clean package

    3、上传Oracle

    loadjava -r -f -verbose -resolve -user scott/scott D:\WorkSpace\JavaWorkSpace\OracleApp\target\sum-1.0-SNAPSHOT.jar
    

    卸载

    dropjava  -r -f -verbose -resolve -user scott/scott D:\WorkSpace\JavaWorkSpace\OracleApp\target\sum-1.0-SNAPSHOT.jar
    

    4、把jar包导入到Oracle之后,之后创建函数

    create or replace function addTwoInt(a number,b number)  return number  as 
    LANGUAGE JAVA NAME  'cays/add/AddNumber.addTwoInt(int,int) return int'; 
    

    5、运行

    select addTwoInt(1,2) from dual;
    

    成功!

    展开全文
  • oracle 导入导出数据

    千次阅读 2010-03-16 17:11:00
    Oracle导入SQL脚本执行和常用命令大全 在工作需要的时候,常常忘记很多命令。今天做的时候才记起!在SQL_PLUS里面执行:sql>@full_path/test.sql; 例:sql>@D:/test.sql; 不需要commit; 一般都是在test.sql 里面...

    Oracle导入SQL脚本执行和常用命令大全 

    在工作需要的时候,常常忘记很多命令。今天做的时候才记起!

    在SQL_PLUS里面执行:

    sql>@full_path/test.sql;   

    例:sql>@D:/test.sql;

    不需要commit; 一般都是在test.sql 里面最后加上一个commit;

    但是需要注意的是:在test.sql文件里面每条语句后必须加上“;”,代表一条语句的执行。

     

    今天在远程导入数据的时候:发现使用PL/SQL 去执行SQL文件特别的慢,而且当数据量大于一定的时候,

    PL/SQL就会崩溃。而使用SQL_PLUS执行该SQL文件速度比较快。4000条数据大概37S左右就执行完成。

     

    附命令大全:

    1. 执行一个SQL脚本文件

    SQL>start file_name

    SQL>@ file_name

    我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。

    @与@@的区别是什么?

    @等于start命令,用来运行一个sql脚本文件。

    @命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径,否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。

    @@用在sql脚本文件中,用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下,而不用指定要执行sql脚本文件的全路径,也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件,该命令一般用在脚本文件中。

    如:在c:temp目录下有文件start.sql和nest_start.sql,start.sql脚本文件的内容为:

    @@nest_start.sql     - - 相当于@ c:tempnest_start.sql

    则我们在sql*plus中,这样执行:

    SQL> @ c:tempstart.sql

    2. 对当前的输入进行编辑

    SQL>edit

    3. 重新运行上一次运行的sql语句

    SQL>/

    4. 将显示的内容输出到指定文件

    SQL> SPOOL file_name

       在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。

    5. 关闭spool输出

    SQL> SPOOL OFF

       只有关闭spool输出,才会在输出文件中看到输出的内容。

    6.显示一个表的结构

    SQL> desc table_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]

    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). 改变缺省的列标题

    COLUMN column_name HEADING column_heading

    For example:

    Sql>select * from dept;

         DEPTNO DNAME                        LOC

    ---------- ---------------------------- ---------

             10 ACCOUNTING                   NEW YORK

    sql>col LOC heading location

    sql>select * from dept;

        DEPTNO DNAME                        location

    --------- ---------------------------- -----------

            10 ACCOUNTING                   NEW YORK

    2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上:

    Sql>select * from emp

    Department name           Salary

    ---------- ---------- ----------

             10 aaa                11        

    SQL> COLUMN ENAME HEADING ’Employee|Name’

    Sql>select * from emp

                Employee

    Department name           Salary

    ---------- ---------- ----------

             10 aaa                11

    note: the col heading turn into two lines from one line.

    3). 改变列的显示长度:

    FOR[MAT] format

    Sql>select empno,ename,job from emp;

          EMPNO ENAME      JOB       

    ---------- ----------     ---------

           7369 SMITH      CLERK     

           7499 ALLEN      SALESMAN  

    7521 WARD       SALESMAN  

    Sql> col ename format a40

          EMPNO ENAME                                    JOB

    ----------   ----------------------------------------         ---------

           7369 SMITH                                    CLERK

           7499 ALLEN                                    SALESMAN

           7521 WARD                                    SALESMAN

    4). 设置列标题的对齐方式

    JUS[TIFY]

    SQL> col ename justify center

    SQL> /

          EMPNO           ENAME                   JOB

    ----------   ----------------------------------------       ---------

           7369 SMITH                                    CLERK

           7499 ALLEN                                    SALESMAN

    7521 WARD                                     SALESMAN

    对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边

    5). 不让一个列显示在屏幕上

    NOPRI[NT]|PRI[NT]

    SQL> col job noprint

    SQL> /

          EMPNO           ENAME

    ----------     ----------------------------------------

           7369 SMITH

           7499 ALLEN

    7521 WARD

    6). 格式化NUMBER类型列的显示:

    SQL> COLUMN SAL FORMAT ,990

    SQL> /

    Employee

    Department Name        Salary    Commission

    ---------- ---------- --------- ----------

    30          ALLEN        ,600    300

    7). 显示列值时,如果列值为NULL值,用text值代替NULL值

    COMM NUL[L] text

    SQL>COL COMM NUL[L] text

    8). 设置一个列的回绕方式

    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]

            COL1

    --------------------

    HOW ARE YOU?

    SQL>COL COL1 FORMAT A5

    SQL>COL COL1 WRAPPED

    COL1

    -----

    HOW A

    RE YO

    U?

    SQL> COL COL1 WORD_WRAPPED

    COL1

    -----

    HOW

    ARE

    YOU?

    SQL> COL COL1 WORD_WRAPPED

    COL1

    -----

    HOW A

    9). 显示列的当前的显示属性值

    SQL> COLUMN column_name

    10). 将所有列的显示属性设为缺省值

    SQL> CLEAR COLUMNS

    8. 屏蔽掉一个列中显示的相同的值

    BREAK ON break_column

    SQL> BREAK ON DEPTNO

    SQL> SELECT DEPTNO, ENAME, SAL

    FROM EMP

    WHERE SAL < 2500

    ORDER BY DEPTNO;

    DEPTNO      ENAME         SAL

    ---------- ----------- ---------

    10           CLARK        2450

    MILLER      1300

    20            SMITH       800

    ADAMS       1100

    9. 在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。

    BREAK ON break_column SKIP n

    SQL> BREAK ON DEPTNO SKIP 1

    SQL> /

    DEPTNO ENAME SAL

    ---------- ----------- ---------

    10 CLARK 2450

    MILLER 1300

    20 SMITH 800

    ADAMS 1100

    10. 显示对BREAK的设置

    SQL> BREAK

    11. 删除6、7的设置

    SQL> CLEAR BREAKS

    12. Set 命令:

    该命令包含许多子命令:

    SET system_variable value

    system_variable value 可以是如下的子句之一:

    APPI[NFO]

    ARRAY[SIZE]

    AUTO[COMMIT]

    AUTOP[RINT]

    AUTORECOVERY [ON|OFF]

    AUTOT[RACE] [EXP[LAIN]] [STAT[ISTICS]]

    BLO[CKTERMINATOR]

    CMDS[EP]

    COLSEP

    COM[PATIBILITY]

    CON[CAT]

    COPYC[OMMIT]

    COPYTYPECHECK

    DEF[INE]

    DESCRIBE [DEPTH ][LINENUM ][INDENT ]

    ECHO

    EDITF[ILE] file_name[.ext]

    EMB[EDDED]

    ESC[APE]

    FEED[BACK]

    FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}

    FLU[SH]

    HEA[DING]

    HEADS[EP]

    INSTANCE [instance_path|LOCAL]

    LIN[ESIZE]

    LOBOF[FSET]

    LOGSOURCE [pathname]

    LONG

    LONGC[HUNKSIZE]

    MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP ] [SPOOL

    ] [PRE[FORMAT] ]

    NEWP[AGE]

    NULL text

    NUMF[ORMAT] format

    NUM[WIDTH]

    PAGES[IZE]

    PAU[SE]

    RECSEP

    RECSEPCHAR

    SERVEROUT[PUT] [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_

    WRAPPED]|TRU[NCATED]}]

    SHIFT[INOUT]

    SHOW[MODE]

    SQLBL[ANKLINES]

    SQLC[ASE]

    SQLCO[NTINUE] {> |text}

    SQLN[UMBER]

    SQLPRE[FIX]

    SQLP[ROMPT]

    SQLT[ERMINATOR]

    SUF[FIX]

    TAB

    TERM[OUT]

    TI[ME]

    TIMI[NG]

    TRIM[OUT]

    TRIMS[POOL]

    UND[ERLINE]

    VER[IFY]

    WRA[P]

    1). 设置当前session是否对修改的数据进行自动提交

    SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}

    2).在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句

    SQL> SET ECHO

    3).是否显示当前sql语句查询或修改的行数

    SQL> SET FEED[BACK]

       默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数

    4).是否显示列标题

    SQL> SET HEA[DING]

    当set heading off 时,在每页的上面不显示列标题,而是以空白行代替

    5).设置一行可以容纳的字符数

    SQL> SET LIN[ESIZE]

       如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。

    6).设置页与页之间的分隔

    SQL> SET NEWP[AGE]

    当set newpage 0 时,会在每页的开头有一个小的黑方框。

    当set newpage n 时,会在页和页之间隔着n个空行。

    当set newpage none 时,会在页和页之间没有任何间隔。

    7).显示时,用text值代替NULL值

    SQL> SET NULL text

    8).设置一页有多少行数

    SQL> SET PAGES[IZE]

    如果设为0,则所有的输出内容为一页并且不显示列标题

    9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。

    SQL> SET SERVEROUT[PUT]  

    在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。

    10).当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。

    SQL> SET WRA[P]

       当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。

    11).是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。

    SQL> SET TERM[OUT]

       在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。

    12).将SPOOL输出中每行后面多余的空格去掉

    SQL> SET TRIMS[OUT]  

       

    13)显示每个sql语句花费的执行时间

    set TIMING

    14). 遇到空行时不认为语句已经结束,从后续行接着读入。

    SET SQLBLANKLINES ON

    Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:

    select deptno, empno, ename

    from emp

    where empno = '7788';

    如果拷贝到sql*plus中执行, 就会出现错误。这个命令可以解决该问题

    15).设置DBMS_OUTPUT的输出

    SET SERVEROUTPUT ON BUFFER 20000

    用dbms_output.put_line('strin_content');可以在存储过程中输出信息,对存储过程进行调试

    如果想让dbms_output.put_line('     abc');的输出显示为:

    SQL>     abc,而不是SQL>abc,则在SET SERVEROUTPUT ON后加format wrapped参数。

    16). 输出的数据为html格式

    set markup html

    在8.1.7版本(也许是816? 不太确定)以后, sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.

    注意其中的spool on, 当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候, 会看到spool文件中出现了等tag.

    14.修改sql buffer中的当前行中,第一个出现的字符串

    C[HANGE] /old_value/new_value

    SQL> l

       1* select * from dept

    SQL> c/dept/emp

       1* select * from emp

    15.编辑sql buffer中的sql语句

    EDI[T]

    16.显示sql buffer中的sql语句,list n显示sql buffer中的第n行,并使第n行成为当前行

    L[IST] [n]

    17.在sql buffer的当前行下面加一行或多行

    I[NPUT]

    18.将指定的文本加到sql buffer的当前行后面

    A[PPEND]

    SQL> select deptno,

       2 dname

       3 from dept;

         DEPTNO DNAME

    ---------- --------------

             10 ACCOUNTING

             20 RESEARCH

             30 SALES

             40 OPERATIONS

    SQL> L 2

       2* dname

    SQL> a ,loc

       2* dname,loc

    SQL> L

       1 select deptno,

       2 dname,loc

       3* from dept

    SQL> /

         DEPTNO DNAME          LOC

    ---------- -------------- -------------

             10 ACCOUNTING     NEW YORK

             20 RESEARCH       DALLAS

             30 SALES          CHICAGO

             40 OPERATIONS     BOSTON

    19.将sql buffer中的sql语句保存到一个文件中

    SAVE file_name

    20.将一个文件中的sql语句导入到sql buffer中

    GET file_name

    21.再次执行刚才已经执行的sql语句

    RUN

    or

    /

    22.执行一个存储过程

    EXECUTE procedure_name

    23.在sql*plus中连接到指定的数据库

    CONNECT user_name/passwd@db_alias

    24.设置每个报表的顶部标题

    TTITLE

    25.设置每个报表的尾部标题

    BTITLE

    26.写一个注释

    REMARK [text]

    27.将指定的信息或一个空行输出到屏幕上

    PROMPT [text]

    28.将执行的过程暂停,等待用户响应后继续执行

    PAUSE [text]

    Sql>PAUSE Adjust paper and press RETURN to continue.

    29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)

    COPY {FROM database | TO database | FROM database TO database}

    destination_table

    [(column, column, column, ...)] USING query

    sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST

    create emp_temp

    USING SELECT * FROM EMP

    30.不退出sql*plus,在sql*plus中执行一个操作系统命令:

    HOST

    Sql> host hostname

    该命令在windows下可能被支持。

    31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回sql*plus:

    !

    sql>!

    $hostname

    $exit

    sql>

    该命令在windows下不被支持。

    32.显示sql*plus命令的帮助

    HELP

    如何安装帮助文件:

    Sql>@ ?sqlplusadminhelphlpbld.sql ?sqlplusadminhelphelpus.sql

    Sql>help index

    33.显示sql*plus系统变量的值或sql*plus环境变量的值

    Syntax

    SHO[W] option

    where option represents one of the following terms or clauses:

    system_variable

    ALL

    BTI[TLE]

    ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|

    TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name]

    LNO

    PARAMETERS [parameter_name]

    PNO

    REL[EASE]

    REPF[OOTER]

    REPH[EADER]

    SGA

    SPOO[L]

    SQLCODE

    TTI[TLE]

    USER

    1) . 显示当前环境变量的值:

    Show all

    2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息

    Show error

    当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。

    3) . 显示初始化参数的值:

    show PARAMETERS [parameter_name]

    4) . 显示数据库的版本:

    show REL[EASE]

    5) . 显示SGA的大小

    show SGA

    6). 显示当前的用户名

    show user

    34.查询一个用户下的对象

    SQL>select * from tab;

    SQL>select * from user_objects;

    35.查询一个用户下的所有的表

    SQL>select * from user_tables;

    36.查询一个用户下的所有的索引

    SQL>select * from user_indexes;

    37. 定义一个用户变量

    方法有两个:

    a. define

    b. COL[UMN] [ NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]

                                OLD_V[ALUE] variable [NOPRI[NT]|PRI[NT]]

    下面对每种方式给予解释:

    a. Syntax

    DEF[INE] [variable]|[variable = text]

    定义一个用户变量并且可以分配给它一个CHAR值。

    assign the value MANAGER to the variable POS, type:

    SQL> DEFINE POS = MANAGER

    assign the CHAR value 20 to the variable DEPTNO, type:

    SQL> DEFINE DEPTNO = 20

    list the definition of DEPTNO, enter

    SQL> DEFINE DEPTNO

            ???????????????

    DEFINE DEPTNO = ”20” (CHAR)

    定义了用户变量POS后,就可以在sql*plus中用&POS或&&POS来引用该变量的值,sql*plus不会再提示你给变量输入值。

    b. COL[UMN] [ NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]

    NEW_V[ALUE] variable

    指定一个变量容纳查询出的列值。

    例:column col_name new_value var_name noprint

       select col_name from table_name where ……..

    将下面查询出的col_name列的值赋给var_name变量.

    一个综合的例子:

    得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):

    column redo_writes new_value commit_count

    select sum(stat.value) redo_writes

    from v$sesstat stat, v$statname sn

    where stat.statistic# = sn.statistic#

    and sn.name = 'user commits';

    -- 等待一会儿(此处为10秒);

    execute dbms_lock.sleep(10);

    set veri off

    select sum(stat.value) - &commit_count commits_added

    from v$sesstat stat, v$statname sn

    where stat.statistic# = sn.statistic#

    and sn.name = 'user commits';

    38. 定义一个绑定变量

    VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]

    定义一个绑定变量,该变量可以在pl/sql中引用。

    可以用print命令显示该绑定变量的信息。

    如:

    column inst_num heading "Inst Num" new_value inst_num format 99999;

    column inst_name heading "Instance" new_value inst_name format a12;

    column db_name   heading "DB Name"   new_value db_name   format a12;

    column dbid      heading "DB Id"     new_value dbid      format 9999999999 just c;

    prompt

    prompt Current Instance

    prompt ~~~~~~~~~~~~~~~~

    select d.dbid            dbid

         , d.name            db_name

         , i.instance_number inst_num

         , i.instance_name   inst_name

    from v$database d,

           v$instance i;

    variable dbid       number;

    variable inst_num   number;

    begin

    :dbid      := &dbid;

    :inst_num := &inst_num;

    end;

    /

    说明:

    在sql*plus中,该绑定变量可以作为一个存储过程的参数,也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值,可以用print命令

    注意:

    绑定变量不同于变量:

    1.        定义方法不同

    2.        引用方法不同

    绑定变量::variable_name

            变量:&variable_name or &&variable_name

    3.在sql*plus中,可以定义同名的绑定变量与用户变量,但是引用的方法不同。

    39. &与&&的区别

    &用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。

    &&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。

    如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:

    select count(*) from emp where deptno = &deptnoval;

    select count(*) from emp where deptno = &deptnoval;

    select count(*) from emp where deptno = &deptnoval;

    将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:

    select count(*) from emp where deptno = &&deptnoval;

    select count(*) from emp where deptno = &&deptnoval;

    select count(*) from emp where deptno = &&deptnoval;

    40.在输入sql语句的过程中临时先运行一个sql*plus命令

    #

    有没有过这样的经历? 在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.

    比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:

    SQL> select deptno, empno, ename

    2 from emp

    3 where

    这时, 你发现你想不起来工资的列名是什么了.

    这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入

    SQL>> select deptno, empno, ename

    2 from emp

    3 where

    6 #desc emp

    Name Null? Type

    ----------------------------------------- -------- --------------

    EMPNO NOT NULL NUMBER(4)

    ENAME VARCHAR2(10)

    JOB VARCHAR2(9)

    MGR NUMBER(4)

    HIREDATE DATE

    SAL NUMBER(7,2)

    COMM NUMBER(7,2)

    DEPTNO NUMBER(2)

    6 sal > 4000;

    DEPTNO EMPNO ENAME

    ---------- ---------- ----------

    10 7839 KING

    41. SQLPlus中的快速复制和粘贴技巧

    1) 鼠标移至想要复制内容的开始

    2) 用右手食指按下鼠标左键

    3) 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样

    4) 内容选取完毕后(所选内容全部反显),鼠标左键按住不动,用右手中指按鼠标右键

    5) 这时,所选内容会自动复制到SQL*Plus环境的最后一行

     

    展开全文
  • oracle 导入导出命令

    2017-02-08 15:06:22
    exp gzairport/gzairport@192.168.1.247/orcl file=d:\base.dmp tables=(pt_certificate,pt_certificate_detail,pt_evaluate,pt_feedback,pt_function,pt_links,pt_news,pt_news_type,pt_partner,pt_role,pt_role_ri
  • oracle导入导出&hive交互

    千次阅读 2017-07-19 22:36:34
    #!/bin/ksh # ./oracle_hive.sh -s srcname -p oo|oh ...# sh /home/oracle/bin/oracle_hive.sh -s LTE_DT_RAWDATA_GRID10 -p oo export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" if [ $# -ne 4 ]; then
  • Oracle导入导出dmp文件

    千次阅读 2012-07-31 13:54:33
    目 录 目 录...3 1 说明...3 2 导出dmp文件...3 3 导入dmp文件...5 3.1 环境准备...5 ...3.2 执行导入...6 ...dmp文件为oracle数据库的数据备份文件,执行oracle数据库导出dmp文件,相当于执行数据库
  • oracle导出function,procedure

    千次阅读 2017-03-07 15:16:34
    Oracle如何导出存储过程  昨天使用exp可以导出oracle数据库表,今天说下怎么导出存储过程。...tools-->Export User Objects...-->选择存储过程(Procedure,Function,Trigger,Type,Type Body,Pack
  • Oracle导入导出及删除指定用户下所有数据库脚本
  • oracle 导入数据 字段过长

    千次阅读 2012-07-23 17:09:58
    今天往oracle导入数据 出现错误说有的字段 超出的最大长度    那么出现这种情况第一反应肯定是编码的问题 网上找来文章分享一下:   一、什么是Oracle字符集  Oracle字符集是一个字节数据的解释的符号...
  • Oracle导入JAR包并调用Java

    千次阅读 2018-07-06 16:08:56
    本文主要内容经常与Oracle Database打交道,难免会遇到这样一些需求,使用PL/SQL处理起来不是那么方便,而用Java处理起来特别容易。本文主要介绍了Oracle如何调用Java来完成一些特别需求,例如:扩展PL/SQL等。基础...
  • 简绍oracle的内置函数,方便查看
  • 一、背景 因为业务需求,现在需要把 Oracle 中几千万的数据转移到 Mongodb,如果通过 PL/SQL Develop 导出,速度...把oracle中的数据导入到csv格式,然后在mongodb中使用mongoimport工具导入到mongo数据库中。 下载...
  • 由于oracle 10g 自带的是jdk1.4,所以如果您使用了oracle 10g 请导入js-14.jar。 (注:经本人测试后发现oracle 10g 导入js-14.jar 时会出现很多的错误,致使最后无法使用java,所以请不要再浪费时间在其上了。 ) ...
  • Oracle导入SQL脚本执行和常用命令大全  在工作需要的时候,常常忘记很多命令。今天做的时候才记起! 在SQL_PLUS里面执行: sql>@full_path/test.sql;  例:sql>@D:/test.sql; 不需要commit; 一般都是在test...
  • ORACLE 导入导出】exp 错误

    千次阅读 2016-04-15 13:24:11
    EXP-00000: Export terminated unsuccessfully Cause: Export encountered an Oracle error. Action: Look up the accompanying Oracle message in the ORA message chapters of this manu...
  • oracle导入数据时出现字段过长

    千次阅读 2014-02-27 11:07:18
    今天往oracle导入数据 出现错误说有的字段 超出的最大长度 那么出现这种情况第一反应肯定是编码的问题 网上找来文章分享一下: 一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之...
  • oracle 导入导出(impdp/expdp)

    千次阅读 2012-07-23 23:05:32
    查看帮助 C:\Windows\system32>expdp -help Export: Release 10.2.0.1.0 - Production on 星期一, 23 7月, 2012 23:04:13 Copyright (c) 2003, 2005, ...数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传
  • function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit.as
  • oracle导出导入dmp详解

    2021-07-15 16:57:57
    导出什么表空间,导入也要什么表空间。 导出什么用户,导入也要什么用户。 使用exp导出需用imp导入 使用expdb导出需用impdb导入 导出 DIRECTORY:转储文件和日志文件所在的目录 DUMPFILE:数据导出后保存到哪个文件...
  • create or replace function encryptionSM3(ins_1 varchar2) return varchar2 as LANGUAGE JAVA NAME 'com/ab/msp/sm/ABCipherUtils.encryptionSM3(java.lang.String ) return java.lang.String'; 报...
  • oracle导入导出expdp impdp详解

    千次阅读 2014-04-09 11:11:26
     如果想不生成dmp文件而直接导入一个数据库,原理和上面类似,直接使用impdp带network_link ,这样可以直接impdp,而绕过了expdp的步骤  impdp network_link=tolink schemas=link remap_schema=link:link2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,553
精华内容 5,421
热门标签
关键字:

oracle导入function