SQLPLUS中用new_value把查询结果传给变量

  • 来源: 中国自学编程网 作者: 若水   2008-04-11/15:23
  • SQLPLUS中new_value的作用还是挺大的。利用这个倒是能解决挺多问题的。
    引用这么段话:

    Oracle SQL*Plus has a very useful new sub-parameter to the column parameter called new_value.

    The new_value directive allows data that has been retrieved from an Oracle table to be stored as a

    variable inside the SQL*Plus script.

    By using the new_value parameter you can make your SQL*Plus script behave like a real

    programming language, storing and addressing program variables, just like in PL/SQL.

    The ability to store SQL*Plus variables and fill them with Oracle data is a very powerful

    feature and makes SQL*Plus scripts more efficient because database access is reduced.
    使用方法小结一下:

    #!/bin/sh

    export ORACLE_SID=CMPR1

    export ORACLE_HOME=/app/oracle/product/9205

    export PATH=$ORACLE_HOME/bin:$PATH

    sqlplus -s/nolog <

    conn / as sysdba

    column inst_num new_value ninst_num format 99999;

    column inst_name new_value ninst_name format a12;

    column db_name new_value ndb_name format a12;

    column dbid new_value ndbid format 9999999999;


    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;

    prompt ###############Use new_value####################

    select dbid,name from v$database where name=’&ndb_name’;


    prompt ################Use variable###################

    variable dbid number;

    variable inst_num number;

    begin

    :dbid := &ndbid;

    :inst_num := &ninst_num;

    end;

    /


    select instance_name,instance_number from v$instance where instance_number=:inst_num;

    select dbid,name from v$database where dbid=:dbid;


    prompt ##############Use sql file#####################

    @cs.sql &ndb_name &ndbid &ninst_num

    Exit

    EOF


    [/app/oracle/utils/scripts]$ cat cs.sql

    select dbid,name from v$database where name=’&1’;


    variable dbid number;

    variable inst_num number;

    begin

    :dbid := &2;

    :inst_num := &3;

    end;

    /

    select instance_name,instance_number from v$instance where instance_number=:inst_num;

    select dbid,name from v$database where dbid=:dbid;


    variable dbid number;

    variable inst_num number;

    begin

    :dbid := &ndbid;

    :inst_num := &ninst_num;

    end;

    /

    select instance_name,instance_number from v$instance where instance_number=:inst_num;

    select dbid,name from v$database where dbid=:dbid;


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多