2023.02.14

가입하다

기존 문법 ANSI 문법
a.column, b.column 선택
표 a, 표 b에서
여기서 a.column = b.column
a.column, b.column 선택
테이블 a 내부 조인 테이블 b에서 (a.column = b.column)
어디…
a.A1, b.B1 선택
~에서
여기서 a.A1 = b.B1(+)
a.A1, b.B1 선택
왼쪽 외부 연결 ~에 a.A1=b.B1
오른쪽 외부 조인 ~에 a.A1=b.B1
가득한 외부 연결 ~에 a.A1=b.B1
직원 이름, 부서. 부서 이름 선택
직원, 부서에서
여기서 Employee.DeptCode = Dept.DeptCode(+)
직원 이름, 부서. 부서 이름 선택
직원의 외부 부서 퇴사
직원.부서 코드 = 부서.부서 코드

직원 이름, 부서. 부서 이름 선택
직원, 부서에서
여기서 직원.부서 코드(+) = 부서.부서 코드
직원 이름, 부서. 부서 이름 선택
맨 오른쪽 직원 부서에서 연결
직원.부서 코드 = 부서.부서 코드

직원 이름, 부서. 부서 이름 선택
직원, 부서에서
여기서 Employee.DepartmentCode(+) = Department.DepartmentCode(+)
직원 이름, 부서. 부서 이름 선택
직원의 전체 외부 조인 부서에서
직원.부서 코드 = 부서.부서 코드

========================================

PL/SQL
코드 블록
– 이름 없는 블록
– 기능/절차
설명하다
변수 문
시작하다
구현 선언
끝;
dbms_output.put_line();
=
system.out.println();
=
문서.쓰기();
콘솔.로그()
언어 C/C++/자바/JS 파스칼/코볼
작업 관리자 = :=
비교 연산자 == =
변수 유형 선언
변수 이름 테이블명.열명%type:=’제퍼슨’;
  • SQL 결과가 하나만 있는 경우 into 문을 사용합니다.
  • SQL 결과가 여러 개인 경우 커서 사용

Explain = Explain / 설명할 변수가 없으면 Explain을 사용하지 마십시오.

declare
i number;
begin
i:=100;
dbms_output.put_line(i);
end;
/

보기 => dbms 출력 => + 부호를 눌러 db에 연결


declare
    a integer := 2**2*3**2;
begin
    dbms_output.put_line('a="||to_char(a));
end;
/


declare
    vs_emp_name varchar2(80); --employees.emp_name%type;
    vs_dep_name varchar2(80); -- departments.department_name%type;
begin
    select a.emp_name, b.department_name
    into vs_emp_name, vs_dep_name --값 1개만 저장가능
    from employees a, departments b
    where a.department_id = b.department_id and a.employee_id =100;
    dbms_output.put_line(vs_emp_name||' - '||vs_dep_name);
end;
/


====================================

if 문
만약에 조건식 1 그 다음에
구현 진술(들);
그렇지 않으면 조건식 2 그 다음에
구현 진술(들);
다른
구현 진술(들);
종료 경우;

declare
    vn_mid employees.manager_id%type;
    vs_self employees.emp_name%type;
    vs_name employees.emp_name%type;
begin
    select emp_name,manager_id into vs_self,vn_mid from employees where employee_id = 100;
    if vn_mid is null then
        dbms_output.put_line('직원명='||vs_self||',매니저가 없습니다.
'); else select emp_name into vs_name from employees where employee_id = vn_mid; if vs_name is null then dbms_output.put_line('직원명='||vs_self||',매니저이름을 찾을 수 없습니다.
'); else dbms_output.put_line('직원명='||vs_self||',매니저='||vs_name); end if; end if; end;


급여가 가장 낮은 사람의 직원 번호, 이름 및 관리자 이름을 찾기 위해 pl/sql을 작성하십시오.

declare
    vn_eid employees.employee_id%type; --사번
    vs_name employees.emp_name%type;   --이름
    vs_mname employees.emp_name%type;  --매니저이름
    vn_mid employees.manager_id%type;  --매니저아이디
begin
    select employee_id, emp_name, manager_id into vn_eid,vs_name,vn_mid from employees 
    where salary = (select min(salary) from employees);
    if vs_name is null then
        dbms_output.put_line('찾을 수 없습니다.
'); else select emp_name into vs_mname from employees where employee_id = vn_mid; if vs_mname is null then dbms_output.put_line('사번 : '||vn_eid||', 이름 : '||vs_name||', 매니저를 찾을 수 없습니다.
'); else dbms_output.put_line('사번 : '||vn_eid||', 이름 : '||vs_name||', 매니저 : '||vs_mname); end if; end if; end; /
declare
    eid employees.employee_id%type;
    ename employees.emp_name%type;
    mname employees.emp_name%type;
    payment employees.salary%type;
begin
    select a.employee_id,a.emp_name,a.salary,b.emp_name
    into eid,ename,payment,mname
    from employees a, employees b
    where a.salary = (select min(salary) from employees)
    and a.manager_id=b.employee_id;
    dbms_output.put_line('사번='||eid||',이름='||ename||', 월급='||payment||',매니저='||mname);
end;
/



========================================

사례 진술
사례 변수/표현식/열 이름
만약에 가치1 그 다음에 실행 선언 1
만약에 가치 2 그 다음에 실행 선언 2
다른 실행 선언 3
사례
만약에 조건식 1 그 다음에 실행 선언 1
만약에 조건식 2 그 다음에 실행 선언 2
다른 실행 선언 3

=======================================

리본
리본
구현 선언
언제 내리다 조건식
최종 루프;
~하는 동안 조건문
리본
구현 진술(들);
최종 루프;

declare
    i number := 0;
begin
    loop
        dbms_output.put_line('i='||i);
        i:=i+1;
        exit when i>10;
    end loop;
    dbms_output.put_line('Program terminated');
end;
/


곱셈 구구표

declare
     i number := 1;
     j number := 1;
begin
    loop
        i:=i+1;
        j:=1;
        loop
            dbms_output.put_line(i||'x'||j||'='||i*j);
            j:=j+1;
            if j>9 then
            dbms_output.new_line;
            exit;
            end if;
        end loop;
        exit when i>=9;
    end loop;
end;
/


9단까지 올라갑니다.

=================================

진술에
~을 위한 변하기 쉬운 ~ 안에 시작 값..종료 값
리본
실행문;
최종 루프;

declare
    i number :=2;
    j number :=1;
begin
    for i in 2..9
    loop
        for j in 1..9
        loop
            dbms_output.put_line(i||'x'||j||'='||i*j);
        end loop;
        dbms_output.new_line;
    end loop;
end;
/


9단까지 올라갑니다.

======================

계속해

소수 찾기

declare
    i number :=2;
    j number :=2;
begin
    for i in 2..1000
    loop
        for j in 2..i
        loop
            if mod(i,j)=0 then exit;
            end if;
        end loop;
        if i=j then dbms_output.put_line(i);
        end if;
    end loop;
end;
/

정답은 아니니 내일 해보겠습니다…