• 티스토리 홈
  • 프로필사진
    chantleman
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
chantleman
  • 프로필사진
    chantleman
    • 분류 전체보기 (328)
      • 프로젝트 (1)
      • react (2)
      • 코딩테스트 (133)
        • lv0 (101)
        • lv1 (10)
        • lv2 (7)
        • lv3 (15)
      • 오류 (14)
      • 리눅스 (5)
      • 자바 (75)
        • spring (7)
      • js (35)
      • 오라클 (39)
        • PLSQL (3)
      • cs (5)
      • 도커 aws (3)
      • 단축키 (3)
      • 나만봐 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • PL/SQL 장바구니
        2024년 10월 23일
        • chantleman
        • 작성자
        • 2024.10.23.:14

         

        장바구니 번호 생성 함수

        create or replace function fn_create_cart_no(
            p_date in date, p_mid in pc03.member.mem_id%type)
            return varchar2
        as
            v_cnt       number:=0; --해당일자의 자료수(행의 수)
            v_cart_no   pc03.cart.cart_no%type; -- pc03 계정의 cart 테이블의 cart_no와 같은 타입이라는 뜻
            v_mid       pc03.member.mem_id%type;
        begin 
            -- select (데이터) into (데이터를 받을 변수)   main 쿼리일때만 into 사용. subquery일 때는 안씀
            -- 하나의 변수에 여러개의 데이터를 넣을 수 없으니까 cursor 사용
            -- cursor를 실행하기 위해 반복문 사용
            select count(*) into v_cnt 
            from pc03.cart 
            where to_date(substr(cart_no,1,8)) = p_date;
            
            if v_cnt = 0 then -- 오늘날짜가 없을 때. 즉 최초로 들어왔을 때
                v_cart_no := to_char(p_date,'YYYYMMDD') || trim('00001'); -- 자리를 맞춰주기 위해 자동으로 중간에 공백을 넣을 수 있기 때문에 뒤에 붙이는 애들은 공백 제거해줘야함
            else    
                select max(cart_no) into v_cart_no
                from pc03.cart
                where to_date(substr(cart_no,1,8)) = p_date;
                
                select distinct cart_member into v_mid
                from pc03.cart
                where cart_no = v_cart_no;
                
                if p_mid != v_mid then
                    v_cart_no := v_cart_no + 1;
                end if;
            end if;
            
            return v_cart_no;
        end;

         

         

        23년 4월 8일 장바구니 번호 조회

        select fn_create_cart_no(to_date('20230408'),'m001') from dual;

         

         

         

        구매했을 때 cart 테이블에 저장

        -- 2023 04 08 a001회원이 p201000001 상품을 5개 구입 -> cart에 저장
        insert into pc03.cart values('a001', 
                                    fn_create_cart_no(to_date('20230408'),'a001'),
                                    'P201000001',
                                    5);

         

         

         

        2023년 5월 매출액이 가장 많은 상품 5개의 납품거래처의 거래처번호, 거래처명, 주소 조회

        select c.cid 
        from(
            select a.cart_prod as cid, 
                    sum(cart_qty) as csum
            from pc03.cart a , pc03.prod b
            where a.cart_prod = b.prod_id
            and a.cart_no like '202305%'
            group by a.cart_prod
            order by csum desc)c
        where rownum<=5;

         

        from - where - group by - having - select - order by 라서

        group by는 select 전, 즉 alias 처리 전이라 alias(cid)를 못쓰지만 order by에는 alias(csum) 사용 가능

         

         

         

        declare
            cursor cur_buyer_5 is
                select c.cid as ccid
                from(
                    select a.cart_prod as cid, 
                            sum(cart_qty) as csum
                    from pc03.cart a , pc03.prod b
                    where a.cart_prod = b.prod_id
                    and a.cart_no like '202305%'
                    group by a.cart_prod
                    order by csum desc)c
                where rownum<=5;
                v_bid pc03.buyer.buyer_id%type;
                v_name pc03.buyer.buyer_name%type;
                v_baddr varchar2(200);
        begin
            for rec in cur_buyer_5 loop
                select b.buyer_id, b.buyer_name, b.buyer_add1||' '|| b.buyer_add2
                into v_bid, v_name, v_baddr
                from pc03.buyer b, pc03.prod p
                where b.buyer_id = rec.ccid;
                
                dbms_output.put_line(v_bid||'  '||v_name|| '  '||v_baddr);
            end loop;
        end;
        728x90

        '오라클 > PLSQL' 카테고리의 다른 글

        [PL/SQL] 구구단 예제  (1) 2024.07.23
        [PL/SQL] 기본 구조  (4) 2024.07.22
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바