2013-10-31 3 views
0

저는 SQL에 익숙하지 않아 pl/sql 변수에서 별칭을 사용하는 조인을 사용하는 방법을 이해할 수 없습니다. 이것은 내가 'l_name'선언해야 '와 "A". "l_name"잘못된 식별자로 오류를 받고 있어요 pl/sql에서 join을 사용하는 방법은 무엇입니까?

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; 

처럼 내 익명 블록 보이는 것과 비슷한 것입니다. 흐름이 내게 완벽 해. 내가 알아야 할 뉘앙스가 있니?

답변

1

l_name은 변수이며 SQL 표현식의 일부가 아닙니다. 나는 또한 NUMBER 대 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

SQL 표현식의 일부로 l_name 변수를 삽입하는 방법이 있습니까? – BobLoblaw

+0

부수적으로, pls_number보다 번호를 선택하는 이유는 무엇입니까? pls_integer가 더 효율적이고 일반적이라고 생각 했나요? – BobLoblaw

+0

저는 지난 10 년 동안 항상 프로젝트에서 NUMBER를 사용했기 때문에 전환 할 이유가 없습니다. l_name을 삽입하려면 GROUP BY에이를 추가해야합니다. GROUP BY는 각 이름에 대한 카운트를 제공하므로 어레이로 정의되지 않았기 때문에 l_name에 삽입 할 수 없습니다. 구조체 주위에 항상 커서를 만들 수 있으며 한 번에 하나의 이름 만 지정할 수 있습니다. – cmutt78

관련 문제