재사용 가능한 SQL 템플릿: SQL 매크로 알아보기🤯
👉SQL 테이블 매크로: 런타임에 테이블 및 기타 매개변수를 전달할 수 있는 재사용 가능한 SQL 템플릿(FROM 절)을 생성합니다.
문서: https://docs.oracle.com/en/database/oracle/oracle-database/19/newft/sql-macros-sqm.html
SQL 테이블 매크로는 19.7 릴리스 업데이트로 백포트된 21c 기능입니다.
CREATE TABLE planets (
json_document BLOB,
CONSTRAINT json_document_is_json CHECK (json_document IS JSON)
);
INSERT INTO planets (json_document)
VALUES ( '[ {"name":"Mercury"}, {"name":"Venus"}, {"name":"Earth"},
{"name":"Mars"}, {"name":"Jupiter"}, {"name":"Saturn"},
{"name":"Uranus"}, {"name":"Neptune"} ]' );
COMMIT;
-- One row retrieved containing a JSON array
SELECT JSON_SERIALIZE(json_document) AS array FROM planets;
ARRAY
-------------------------------------------------------------
[ {"name":"Mercury"}, {"name":"Venus"}, {"name":"Earth"}, … ]
-- Second version where the column table is also a parameter
CREATE OR REPLACE FUNCTION unwind(t DBMS_TF.TABLE_T, c DBMS_TF.COLUMNS_T)
RETURN VARCHAR2 SQL_MACRO IS
BEGIN
RETURN := q'{
SELECT d.array_item AS JSON_DOCUMENT, d.order_id
FROM unwind.t nested }'|| unwind.c(1) ||q'{ COLUMNS (
NESTED PATH '$[*]' COLUMNS (
array_item CLOB FORMAT JSON PATH '$',
order_id FOR ORDINALITY
)
) d}';
END;
/
-- Using a table and one of its columns as parameters of SQL Macro
SELECT * FROM unwind( planets, COLUMNS( json_document ) );
JSON_DOCUMENT ORDER_ID
------------------ ----------
{"name":"Mercury"} 1
{"name":"Venus"} 2
{"name":"Earth"} 3
{"name":"Mars"} 4
{"name":"Jupiter"} 5
{"name":"Saturn"} 6
{"name":"Uranus"} 7
{"name":"Neptune"} 8
위의 예에서는 열을 매개변수로 전달할 수도 있는 SQL 매크로의 두 번째 버전(위의 애니메이션 GIF와 비교)을 사용합니다!
명왕성에 대한 설명: NASA에 따르면 이것은 더 이상 9번째 행성으로 간주되지 않습니다 🙂
훌륭한 기능에 대한 요약을 찾는 데 많은 도움을 준 Chris Saxon에게 찬사를 보냅니다!
Reference
이 문제에 관하여(재사용 가능한 SQL 템플릿: SQL 매크로 알아보기🤯), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/loiclefevre/reusable-sql-templates-learn-about-sql-macros-3527텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)