SAP_ABAP_프로그래밍 기초_데이터베이스(CRUD)_SQL 열기/데이터 읽기/데이터 추가/데이터 업데이트/데이터 추가 또는 변경/데이터 삭제/커서를 사용하여 데이터 읽기/데이터 클러스터

SAP ABAP 컨설턴트(개발 엔지니어) 역량 모델_Terry가 기업 디지털화에 대해 이야기합니다. 블로그-CSDN 블로그 기사가 487회 조회되었습니다. 목표: SAP abap 컨설턴트 역량 모델 검토를 바탕으로 약 1년 경력의 abaper에게 3년 경력으로 빠르게 성장할 수 있는 초석을 제공합니다! https://blog.csdn.net/java_zhong1990/article/details/132469977


주로 '공사장에서 벽돌 옮기기' 작업을 하며 기본 스킬은 거의 신경쓰지 않는 편이라 할게 없어서 골라서 리뷰해봤습니다! 

실제로 프로젝트에서 아주 드물게 사용되기 때문에 프로그래밍을 배울 때에는 먼저 프레임워크를 배우고 그다음 세부사항을 배워야 합니다! , 배워야 할 세부 사항이 너무 많기 때문입니다!


JAVA를 하는 친구들은 지금은 프로젝트에 기본적으로 Mybtis를 사용하고, 초창기에는 Hibernate 프레임워크를 사용했는데, 요즘에는 JDBC를 사용하여 데이터베이스를 직접 운영하는 일이 거의 없습니다.


ABAP 도메인에 정의된 CRUD에는 특별한 것이 없으며 SQL 문과 거의 동일합니다!


 'CRUD' 스타일을 사용한다면, 인생을 마감할 때 친구들은 어떻게 생각할까요?


1 SQL 열기

(1) SY-SUBRC, SQL 연산 성공 여부

(2) SY-DBCNT, 행 수에 영향을 줍니다.


2 데이터 읽기

SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>]
[GROUP BY <fields>] [ORDER BY <sort_order>].

실제 사례에서는 문법을 보지 말고 예를 살펴보세요.

SELECT
        mara~zwlcms,
        mara~matnr, "物料描述
        mara~mtart, "物料类型
        mara~meins, "单位
        marc~werks,

        marc~ekgrp,
        marc~dismm,
        marc~dispo,
        marc~sfcpf,
        marc~fevor,

        mvke~vkorg,  "销售组织
        mbew~vprsv,  "价格控制
        mbew~mlast   "物料价格确定: 控制

    INTO CORRESPONDING FIELDS OF TABLE @gt_data
    FROM mara
    LEFT JOIN marc ON marc~matnr = mara~matnr
    LEFT JOIN mvke ON mvke~matnr = mara~matnr AND mvke~dwerk = marc~werks
    LEFT JOIN mbew ON mbew~matnr = mara~matnr AND mbew~bwkey = marc~werks

    WHERE

    mara~matnr     IN @so_matnr
    AND marc~werks IN @so_werks

    .

선택 결과 정의 SELECT

(1) 여러 행의 모든 ​​데이터를 선택합니다: SELECT [DISTINCT] * ............ENDSELECT.

(2) 단일 행의 모든 ​​데이터 선택: SELECT SINGLE [FOR UPDATE] * ....... WHERE <조건> ......

(3) 지정된 열의 모든 데이터를 선택합니다. SELECT [SINGLE [FOR UPDATE]] [DISTINCT] <s1><s2> .....

FROM 데이터 테이블 지정

(1) 프로그램에서 데이터베이스 테이블을 지정합니다.... FROM <dbtab> [CLIENT SPECIFIED] [BYPASSING BUFFER]
[ UP TO <n> ROWS ]...... 

CLIENT SPECIFIED 옵션은 자동 그룹 처리를 끄는 데 사용되며 ,
BYPASSING BUFFER 옵션은 SAP 테이블 버퍼를 읽지 않고 데이터베이스를 직접 읽을 수 있도록 합니다 .

(2) 런타임 시 데이터베이스 테이블 지정

......FROM (<dbtabname>) [클라이언트 지정] [버퍼 우회]
[최대 <n>행].. INTO <대상> .....

이 형식의 FROM 절은 INTO 절에만 사용할 수 있습니다.

INTO 대상 지역 지정

(1) 데이터를 작업 공간으로 읽어옵니다. SELECT ... INTO <wa> ............

(2) 내부 테이블 SELECT .....INTO TABLE <itab>로 데이터를 읽습니다.

(3) 미리 정의된 패키지 크기를 사용하여 내부 테이블로 데이터를 읽습니다.   SELECT * .....INTO TABLE <itab> PACKAGE SIZE <n>.....

(4) 내부 테이블에 데이터 행을 추가합니다. SELECT .....  APPENDING  TABLE <itab>.....

(5) 구성요소별로 데이터 구성요소 읽기 

선택 ... <wa>의 해당 필드로 ........

SELECT ... 테이블의 해당 필드로 <itab> ........

선택 ... 테이블의 해당 필드 추가 <itab> ........

WHERE에서 읽은 행을 선택하세요.

(1) 프로그램에서 행 선택 조건을 지정합니다..... WHERE <조건>.....

(2) 논리 링크 연산자를 사용하여 조건 결합


3 데이터 추가

단일 행 INSERT INTO <dbtab> [CLIENT SPECIFIED] VALUES <wa>를 추가합니다.

여러 줄 추가 

테이블 <itab> [중복 키 허용]에서 <dbtab> [클라이언트 지정]을 삽입하세요.


4 데이터 업데이트

단일 행 업데이트 

UPDATE <dbtab> [CLIENT SPECIFIED] FROM <wa> 작업 공간 <wa>의 내용은
<wa>와 동일한 기본 키를 가진 데이터베이스 테이블 <dbtab>의 행을 덮어씁니다.

작업공간 <wa>가 지정되지 않았습니다.
그러나 테이블 작업 공간 <dbtab>의 콘텐츠는 동일한 기본 키로 데이터베이스 테이블의 행을 덮어씁니다.

업데이트 <dbtab> [클라이언트 지정].

여러 행 업데이트 

업데이트 <dbtab> [클라이언트 지정] SET <S1> ..<Sn> [WHERE <조건>].

내부 테이블을 사용하여 여러 행 업데이트

테이블 <itab>에서 <dbtab> [클라이언트 지정]을 업데이트합니다.

테이블 <itab>에서 업데이트(<dbtabname>) [클라이언트 지정].


5 데이터 추가 또는 변경

단일 행 삽입

수정 <dbtab> [클라이언트 지정] [<wa>에서].

수정(<dbtabname>) [클라이언트 지정] [FROM <wa>].

여러 행 삽입

테이블 <itab>에서 <dbtab> [클라이언트 지정]을 수정하세요.

테이블 <itab>에서 (<dbtabname>) [클라이언트 지정]을 수정합니다.


6 데이터 삭제

한 줄 삭제 

<wa>에서 <dbtab> [클라이언트 지정]을 삭제하세요.

<dbtab> [클라이언트 지정]을 삭제하세요.

여러 줄 삭제

<dbtab> [클라이언트 지정] WHERE <조건>에서 삭제하세요.

(<dbtabname>) [클라이언트 지정] WHERE <조건>에서 삭제합니다.

내부 테이블을 사용하여 여러 행 삭제

테이블 <itab>에서 <dbtab> [클라이언트 지정]을 삭제합니다.

테이블 <itab>에서 (<dbtabname>) [클라이언트 지정]을 삭제합니다.


7 커서를 사용하여 데이터를 읽고,

ORACLE 커서와 매우 유사

커서 열기

선택을 위해 [홀드 있음] <c> 커서를 엽니다 ........ [WHERE <조건>].

커서로 데이터 읽기

다음 커서 <c>를 <대상>으로 가져옵니다.

커서 닫기

커서를 닫으세요. <c>.

다음 상황에서는 커서가 자동으로 닫힙니다:
1) COMMIT WORK 또는 ROLLBACK WORK 문을 실행할 때,
2) 자체 SQL 데이터베이스 커밋 또는 취소를 실행할 때,
3) 화면을 변경할 때,
4) 원격 함수 호출을 실행할 때.
OPEN CURSOR 문에서 WITH HOLD 옵션을 사용하는 경우
자체 SQL의 데이터베이스 커밋은 커서를 닫지 않습니다.


8개의 데이터 클러스터

데이터 객체를 메모리에 저장

 <f1> [FROM <g1>] <f2> [FROM <g2>] ... 메모리 ID <키>로 내보내기.

메모리에서 데이터 객체 읽기

IMPORT <f1> [TO <g1>] <f2> [TO <g2>] ... 메모리 ID <키>에서.

메모리에서 데이터 클러스터 삭제

여유 메모리 [ID <키>]. 

ID <key>가 추가되지 않은 경우 이 문은 전체 메모리를 삭제합니다.
EXPORT를 사용하여 이전에 ABAP/4 메모리에 저장된 모든 데이터 클러스터를 포함합니다.
ID <key>를 추가한 후 이 명령문은 이 이름으로 명명된 데이터 클러스터만 삭제합니다.
전체 메모리를 삭제하면 모든 시스템 루틴의 메모리 내용이 손실되므로 ID가 추가된 FREE MEMORY 문만 사용해야 합니다.

추천

출처blog.csdn.net/java_zhong1990/article/details/134727733