Oracle

使用 sqlplus 綁定變數和 shell 腳本

  • November 5, 2018

我希望使用帶有 shell 腳本的綁定變數來執行 DML。例如,類似:

#!/bin/bash

SH_NUM=10

sqlplus -S test_user/test_pass <<EOD
var a number;
a:=${SH_NUM}
insert into test_table values(a);
commit;
EOD

我不確定這是否可行,我可以在使用 pl/sql 時使用這種方法,但我想知道我是否也可以使用這種方法。

當然有可能:

[oracle@o71 ~]$ cat 1.sh
#!/bin/bash

SH_NUM=10

sqlplus -S bp/bp<<EOD
set lines 220 pages 5000
col plan_table_output format a50
var a number;
exec :a :=${SH_NUM};
insert into t1 values(:a);
commit;
select * from table(dbms_xplan.display_cursor(format=>'basic'));
exit
EOD

執行它(我只是放在DBMS_XPLAN.DISPLAY_CURSOR那裡查看執行的最後一條語句):

[oracle@o71 ~]$ ./1.sh

1 row created.


Commit complete.


PLAN_TABLE_OUTPUT
--------------------------------------------------
EXPLAINED SQL STATEMENT:
------------------------
insert into t1 values(:a)


-----------------------------------------
| Id  | Operation                | Name |
-----------------------------------------
|   0 | INSERT STATEMENT         |      |
|   1 |  LOAD TABLE CONVENTIONAL | T1   |
-----------------------------------------


12 rows selected.

引用自:https://dba.stackexchange.com/questions/221821