2012-03-16 5 views

ответ

1

Создайте файл xxxx.sql и выполнить его так:

set serveroutput on; 
execute STORED_PROCEDURE; 
set serveroutput off; 
exit 

Вам нужно будет способ выполнить сценарий, я использую CRON в системах на основе * Nix. Мой сценарий выглядит как этот

#!/bin/sh 
# This short shell script calls the XXXX Stored Procedure 
# drive. 
PATH=$PATH:/opt/oracle/local/bin:/usr/local/bin 
export ORACLE_SID=XXXX; 
export ORAENV_ASK=NO;  
export TWO_TASK=XXXXXXXXX;  
. /usr/local/bin/oraenv 
sqlplus USERID/PASSWPRD @SQL_Script_to_call_stored_Proceudre.sql 
exit 
+1

Вы пропустили '@'. Persaonlly, я также всегда использовал флаг '-s' для уменьшения шума; и особенно если он работает от 'cron' (хотя это, похоже, не является требованием здесь) явно устанавливает enviromnment:' ORACLE_HOME', 'ORACLE_SID' и т. д. –

+1

@Alex Poole - вы на 100% правильны. Я обработал пример всего этого, прежде чем опубликовать его. Больше из паранойи, что однажды я выложу пароль или критическое имя БД на случай аварии. Я очистил его сейчас – ProfessionalAmateur

+0

Это не паранойя, они действительно хотят вас ... * 8-) –

0

Вот пример:

создать ш файл "callProcedureFromBash.sh"

#!/bin/bash  this is a comment 

#if you can access sqlplus already, you don't need following 2 lines 
export ORACLE_HOME = /efs/dist/oracledb/client/10G/exec 
export PATH=$PATH:$ORACLE_HOME/bin 

sqlplus "userid/[email protected](DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = WWW.YOURHOST.COM) (PORT = 12345) (CONNECT_DATA = (SID = HXZ524))))" <<END 

DECLARE 
    a int; 
BEGIN 
    packagename.Procedurename(a); 
END; 
/
commit;