선택 식 (MySQL docs에서 select_expr
)을 추출하여 SQL 쿼리/뷰를 단순화하는 데 관심이 있습니다. select_expr
은 기본적으로 변수로 추출 될 수있는 작은 양의 변형으로 복제됩니다.MySQL 함수 또는 프로 시저를 사용하여 SELECT 식 추출
예를 들어 다음은 기존 쿼리/뷰입니다.
CREATE OR REPLACE VIEW my_view AS
SELECT
json_unquote(json_extract(sr.response, concat(SUBSTRING_INDEX(json_unquote(
JSON_SEARCH(mt.response, 'one', 'pref.field_1', NULL, '$.f[*].q')), '.', 2),
'.', 'value'))) AS field_1,
json_unquote(json_extract(sr.response, concat(SUBSTRING_INDEX(json_unquote(
JSON_SEARCH(mt.response, 'one', 'pref.field_2', NULL, '$.f[*].q')), '.', 2),
'.', 'value'))) AS field_2,
json_unquote(json_extract(sr.response, concat(SUBSTRING_INDEX(json_unquote(
JSON_SEARCH(mt.response, 'one', 'pref.field_3', NULL, '$.f[*].q')), '.', 2),
'.', 'value'))) AS field_3,
FROM my_table mt;
가변 비트는 : field_1
, field_2
및 field_3
. 나는 다음과 같은 시도하지만, select_expr
평가에 도착하는 방법을 잘 봤는데
CREATE OR REPLACE VIEW my_view AS
SELECT
get_select_expr('field_1') AS field_1,
get_select_expr('field_2') AS field_2,
get_select_expr('field_3') AS field_3,
FROM my_table mt;
:
은 이론적으로,이 내가하고 싶은 것입니다. 그것은 문자열을 반환하는 것이 합리적이지만, 평가할 수있는 방법을 알 수는 없습니다. 어쩌면 내가 프로 시저를 사용해야하지만, 이것이 내 MySQL 지식이 무너지는 부분이다.
DROP FUNCTION IF EXISTS get_select_expr;
CREATE FUNCTION get_select_expr (field_name VARCHAR(255))
RETURNS VARCHAR(255) DETERMINISTIC
RETURN concat('json_unquote(json_extract(mt.response, concat(
SUBSTRING_INDEX(json_unquote(JSON_SEARCH(mt.response,
\'one\', \'pref.', field_3, '', NULL, \'$.f[*].q\')),
\'.\', 2), \'.\', \'value\')))');
SELECT get_select_expr('field_1') AS field_1 FROM my_table;
내가 제안한 유사한 질문을 모두 수행했지만 필요한 것을 찾지 못했습니다. 내가 잘못 가고있는 어떤 생각이나 포인터? 나는 올바른 용어를 찾고 있는지조차 확신하지 못합니다.
, 당신은 전체 SQL 문에서이 필요합니다 :
그냥 필드 값과 매개 변수로 JSON 필드 값을받는 함수를 만들고 동적 SQL이 필요하지 않습니다 한 조각. 문자열 변수의 내용은 데이터로 남아 있습니다. 준비된 명령문을 사용하여 SQL 문을 동적으로 어셈블하고 실행할 수 있지만 여전히 from 절을 사용하여 전체 명령문이 필요합니다. – Shadow
당신이 할 수있는 일은 수식을 함수에 캡슐화하고 필드 이름을 매개 변수로 전달하여 출력을 계산하는 것입니다. – Shadow