2011-08-06 68 views

回答

14

在PL/SQL塊select語句應該有一個into條款:

DECLARE 
v_department egpl_department.department_name%type; 
BEGIN 
    select department_name 
    into v_department 
    from egpl_department 
    where department_id in (select department_id from egpl_casemgmt_activity); 

    -- Do something useful with v_department 
END; 
7

在PL/SQL你不能只選擇一些數據。結果應該去哪裏?

的選項有:

  • 刪除BEGINEND和運行SELECT與SQL * Plus或一些其他的工具,它可以運行SQL語句和地方呈現的結果。

  • 使用SELECT department_name INTO dep_name把結果爲PL/SQL變量(只適用,如果你的SELECT返回單行)

  • 使用SELECT department_name BULK COLLECT INTO dep_name_table把結果爲PL/SQL表(適用於多行)

或者你可以描述你想要達到的目標以及你想要運行SQL或PL/SQL代碼的環境。

6

PLS-00103總是意味着編譯器已拋,因爲我們做了一個語法錯誤。這將是非常整齊,如果消息文本說:You have made a syntax error, please check your code但可惜事實並非如此。

甲骨文的文檔是綜合性的在線。你可以找到關於將SQL查詢集成到PL/SQL here的章節。我敦促你閱讀它,以防止你的下一個問題。因爲一旦你有固定的簡單的語法姜子牙你會打TOO_MANY_ROWS(假設你有一個以上的部門)。

+0

感謝您的聯繫! –

3

爲了避免TOO_MANY_ROWS問題,你可以使用光標,這樣的事情(我沒有測試過這一點,但沿着這些線路)

DECLARE 

v_department egpl_department.department_name%type; 

cursor c_dept IS 
    select department_name 
    into v_department 
    from egpl_department 
    where department_id in (select department_id from egpl_casemgmt_activity) 
    order by department_name; 

BEGIN 

    OPEN c_dept; 
    FETCH c_dept INTO v_department; 
    CLOSE c_dept; 

    -- do something with v_department 

END; 

這將會把它發現在表中的第一個值進入v_department。使用ORDER BY子句來確保返回的行將是您需要的行,假設有兩個不同值的可能性。

相關問題