2011-01-28 45 views
1

我有這樣一個過程:如何將參數傳遞給DBMS.SUBMIT上的過程?

create or replace procedure addJobTest (
    opisArg varchar2 
)as 

    begin 
    insert into JobsTest(opis) values (opisArg); 

end addJobTest; 

我試圖用DBMS.SUBMIT過客 'ala123' 的說法

Declare 
jobInsertNo number; 
BEGIN 
     DBMS_JOB.SUBMIT (number, 
        'addJobTest('||''''||'ala123'||''''||');', 
        SYSDATE, 
        'SYSDATE + (10/(24*60*60))'); 
    COMMIT; 
    END; 

使用它,但我得到一個錯誤。它說

ORA-06550: line 5, column 33: 
PLS-00103: Encountered the symbol "ALA123" when expecting one of the following: 
    ) , * & | = - + </> at in is mod remainder not rem => .. 
    <an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_ 
    LIKE4_ LIKEC_ between || multiset member SUBMULTISET_ 
The symbol ", was inserted before "ALA123" to continue. 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

我應該如何通過在DBMS.SUBMIT一個varchar參數addJobTest程序?

回答

2

我發現一個小錯字在你的PL/SQL塊但除此之外,你的代碼工作:

SQL> CREATE TABLE JobsTest (opis VARCHAR2(20)); 

Table created 

SQL> CREATE OR REPLACE PROCEDURE addJobTest(opisArg VARCHAR2) AS 
    2 BEGIN 
    3  INSERT INTO JobsTest (opis) VALUES (opisArg); 
    4 END addJobTest; 
    5/

Procedure created 

SQL> DECLARE 
    2  jobInsertNo NUMBER; 
    3 BEGIN 
    4  DBMS_JOB.SUBMIT(jobInsertNo, /* instead of number */ 
    5      'addJobTest('||''''||'ala123'||''''||');', 
    6      SYSDATE, 
    7      'SYSDATE + (10/(24*60*60))'); 
    8  COMMIT; 
    9 END; 
10/

PL/SQL procedure successfully completed 

SQL> select * from jobstest; 

OPIS 
-------------------- 
ala123 
2
DECLARE 
    jobInsertNo NUMBER; 
    BEGIN 
    DBMS_JOB.SUBMIT(jobInsertNo, /* instead of number */ 
        q'{addJobTest('ala123');}', 
        SYSDATE, 
        'SYSDATE + (10/(24*60*60))'); 
    COMMIT; 
END;