2013-10-31 44 views
0

我是新來的sql,我無法弄清楚如何使用連接,我們使用別名與pl/sql變量。這是類同我的匿名塊的樣子如何在pl/sql中使用連接?

DECLARE 
l_count PLS_INTEGER; 
l_name EmpTable.Name%Type; 
BEGIN 
    FOR l_row In (
    Select * 
     From User_Tab_Columns 
    Where Table_Name = 'EmpTable') 
    Loop 
    l_name := l_row.Name; 
    Select Count(A.l_name) 
     INTO l_count 
     FROM EmpTable A 
     INNER JOIN CustTable B on A.id = B.emp_id; 
    DBMS_OUTPUT ("The number of employees who are also customers are " || l_count); 
    END LOOP; 
END; 

我收到提示爲「l_name」必須聲明」和‘A’。‘l_name’無效的標識符。這個流程對我來說非常有意義。有我應該知道的一些細微差別嗎?

回答

1

l_name是一個變量,不屬於你的SQL表達式。我也更喜歡使用NUMBER vs PLS_INTEGER。我想你會希望做這樣的事情:

DECLARE 
l_count NUMBER; 
BEGIN 
    Select Count(A.Name) 
    INTO l_count 
    FROM EmpTable A 
    INNER JOIN CustTable B on A.id = B.emp_id; 
    DBMS_OUTPUT ("The number of employees who are also customers are " || l_count); 
END; 
+0

是否有插入l_name變量作爲SQL表達式的一部分呢? – BobLoblaw

+0

在附註中,爲什麼選擇的數字超過了pls_number。我認爲pls_integer更高效一般? – BobLoblaw

+0

我在過去的10年中一直在項目中使用NUMBER,因此沒有理由將其切換。要插入l_name,您必須將其添加到GROUP BY中,這會反過來爲您指定每個名稱,因此無法將其插入到l_name中,因爲它沒有被定義爲數組(我可以說)。你總是可以在結構周圍建立一個光標,並且一次只做一個名字。 – cmutt78