[SQL] 테이블 및 컬럼 이름을 전달 동적 바인딩 변수를 사용하여
SQL테이블 및 컬럼 이름을 전달 동적 바인딩 변수를 사용하여
바인드 변수를 사용하여 쿼리를 동적으로 열 및 테이블 이름을 전달할 수있는 방법이 있습니까? 이것은 간단한 연결 연산자를 || 사용하여 수행 할 수 있지만, 나는이 달성 할 수있는 다른 방법을 싶습니다.
편집하다
OPEN abc_cur FOR 'Select :column_name
from :table_name'
USING column_name,table_name;
이 예에서 나는 EMP로 EMPNO, ENAME 및 TABLE_NAME로 COLUMN_NAME을 통과하고
그러나이 방법은 나를 위해 작동하지 않습니다. 이 연결의 전통적인 접근 다른 다른 접근을 할 수 있습니까?
해결법
-
==============================
1.테이블 및 열 이름은 더, 바인드 변수로 전달되지 수 없습니다. 바인드 변수의 전체 포인트는 오라클이 문에 대해 한 번 쿼리 계획을 생성하고 다른 바인드 변수 값으로 여러 번 실행할 수 있다는 것입니다. 최적화가 열이 선택에 대한 필터링되고 있는지 테이블에 액세스하고 또는 무엇을 알고하지 않는 경우, 쿼리 계획을 생성 할 수 없습니다.
테이블 및 열 이름은 더, 바인드 변수로 전달되지 수 없습니다. 바인드 변수의 전체 포인트는 오라클이 문에 대해 한 번 쿼리 계획을 생성하고 다른 바인드 변수 값으로 여러 번 실행할 수 있다는 것입니다. 최적화가 열이 선택에 대한 필터링되고 있는지 테이블에 액세스하고 또는 무엇을 알고하지 않는 경우, 쿼리 계획을 생성 할 수 없습니다.
당신의 관심사는 (대부분의 시간, 동적 SQL에 의존 할 필요가 데이터 모델의 문제를 의미한다) SQL 인젝션 공격에 관한 것으로, 그 동적 SQL을 가정하는 것은 실제로 필요한 경우, 검증하는 DBMS_ASSERT 패키지를 사용할 수있는 테이블 이름 및 열 이름이 포함 된 SQL이 포함되어 있지 않습니다.
-
==============================
2.아니 당신은 할 수 없습니다. 조회 테이블 또는 열 이름을 변경하는 질의의 의미를 변경한다 - 그것은 다른 쿼리 즉된다.
아니 당신은 할 수 없습니다. 조회 테이블 또는 열 이름을 변경하는 질의의 의미를 변경한다 - 그것은 다른 쿼리 즉된다.
바인드 변수는 동일한 쿼리에 다른 값을 전달 대해 모두. 옵티마이 않고도 다른 값 조회를 다시 사용할 수를 재 해석하고 최적화한다.
from https://stackoverflow.com/questions/9723931/passing-table-and-column-name-dynamically-using-bind-variables by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 작은 따옴표로 묶인 변수에 SQL 주입을 방지하기 위해 반드시 htmlspecialchars의 부족인가? (0) | 2020.05.28 |
---|---|
[SQL] MySQL의 - 장소 날짜 유형 변경 날짜 문자열? (0) | 2020.05.28 |
[SQL] 어떻게 다른 컬럼에 문자열을 분리하는? (0) | 2020.05.28 |
[SQL] PostgreSQL의에서 병렬 unnest () 및 정렬 순서 (0) | 2020.05.28 |
[SQL] 다른 테이블에서 ID와 이름을 선택하고 쿼리에 가입 MYSQL (0) | 2020.05.28 |