ExecuteSQL
FileMaker Pro 파일의 지정된 테이블 일치 항목에 대해 SQL 쿼리문을 실행합니다.
포맷
ExecuteSQL(sql 쿼리 ; 필드 구분자 ; 행 구분자 { ; 인수... })
매개 변수
sql 쿼리
- SQL SELECT 문. 구문은 두 쿼리의 결과를 결합하는 Union 절을 포함할 수 있습니다. 구문은 선택적 인수를 쿼리에서 사용하는 위치를 표시하는 프로그래밍 방식으로 생성된 SQL(동적 매개 변수)을 포함할 수 있습니다. 물음표(?)를 사용하여 동적 매개 변수를 지정합니다.
필드 구분자
- 결과의 필드 간 구분 기호로 사용되는 문자열. 비어 있는 문자열을 지정한 경우 구분 기호는 쉼표입니다. 결과의 마지막 필드 다음에는 필드 구분 기호가 표시되지 않습니다.
행 구분자
- 결과의 레코드 간 구분 기호로 사용되는 문자열. 비어 있는 문자열을 지정한 경우 구분 기호는 캐리지 리턴입니다. 행 구분 기호는 결과의 마지막 행 다음에는 표시되지 않습니다.
인수
- 쿼리문에서 동적 매개 변수의 값으로 사용되고 평가되며 세미콜론(;)으로 구분되는 하나 이상의 표현식입니다.
반환되는 데이터 유형
텍스트
다음 버전에서 시작됨
12.0
설명
ExecuteSQL로 동적 매개 변수를 포함한 SQL SELECT 문을 실행하여 삽입 공격을 통해 보안이 취약해지지 않도록 FileMaker Pro 데이터베이스를 안전하게 쿼리합니다.
ExecuteSQL은 FileMaker Pro에서 생성된 관계를 인식하지 않으며 SQL 문에서 관계를 정의하도록 유연성을 제공하고 레이아웃 문맥과 독립적으로 모든 테이블에서 데이터를 검색합니다.
ExecuteSQL은 데이터나 데이터베이스 스키마를 수정하는SQL 문과 함께 사용할 수 없습니다(예: 삽입 또는 테이블 삭제 명령).
sql 쿼리
에서 여러 개의 동적 매개변수를 사용하는 경우, 첫 번째 물음표 문자는 첫 번째 인수
매개변수, 두 번째 물음표 문자는 두 번째 인수 매개변수로 대치됩니다.
쿼리 구문 분석 또는 실행 중 오류가 발생하면, ExecuteSQL은 ?. 더 자세한 오류 메시지를 받으려면 ExecuteSQLe 함수를 사용하십시오.
참고
- SQL 쿼리에서 날짜에 올바를 포맷을 적용하려면 DATE 문을 사용합니다. DATE 문을 사용하지 않는 경우 ExecuteSQL은 날짜를 일반 문자열로 취급합니다.
- FileMaker Pro는 운영 체제나 파일의 위치가 아닌 Unicode/SQL 포맷으로 날짜, 시간 및 숫자 데이터를 반환합니다.
- ExecuteSQL은 중괄호가 없는 SQL-92 구문 ISO 날짜 및 시간 포맷만 승인합니다. ExecuteSQL은 중괄호 안의 ODBC/JDBC 포맷 날짜, 시간 및 타임스탬프 상수를 승인하지 않습니다.
- FileMaker SQL은 유니코드 이진 정렬 순서를 사용합니다. 언어 정렬 또는 기본 언어 중립적 정렬 순서로 사용되는 FileMaker Pro 정렬 순서와는 다릅니다.
- SELECT 문의 구문, 지원되는 SQL 문, 표현식 및 카탈로그 함수에 대한 세부사항은 FileMaker ODBC 및 JDBC 설명서와 FileMaker SQL 참조를 참조하십시오.
- ExecuteSQL 함수는 SQL SELECT 문을 사용하여 ODBC 데이터 원본이 아닌 FileMaker 데이터 원본에 있는 테이블을 쿼리합니다. ODBC 데이터 원본에 대한 SELECT 문 및 기타 지원되는 SQL 문을 실행하려면, SQL 실행 스크립트 단계를 사용하십시오.
예제 1
데이터베이스에 두 테이블, Employee 및 Salary가 포함되어 있고 EmpID 필드를 통해 관련되어 있다고 가정합니다.
참고 Empoyees::EmpID, Salaries::EmpID 및 Salaries::Salary 필드는 숫자 필드입니다.
ExecuteSQL 함수를 사용하면 현재 레코드를 변경하거나 찾기 세트를 수정하지 않고 지정된 레코드에서 필드 값을 반환할 수 있습니다.
ExecuteSQL("SELECT Department FROM Employees WHERE EmpID = 1")
은 현재 레코드, 찾기 세트나 레이아웃에 관계없이 개발을 반환합니다.
예제 2
예제 1의 경우, 부서의 총 월급에 비례한 직원의 월급 비율을 표시하기 위해 Employees 테이블에 필드를 추가하고 싶다고 가정합니다. FileMaker Pro의 계산을 사용하여 이 값을 생성하더라도 ExecuteSQL 함수로 동적 매개 변수를 사용한 이 쿼리를 지정할 수 있습니다. 아래 예제는 필드(S.Salary
, E.EmpID
및 S.EmpID
)를 지정할 때 Employee 테이블(E
)과 Salary 테이블(S
)에 대해 별칭을 사용합니다.
Employees 테이블에서 계산 필드(Percent Dept Salaries)를 정의한 다음 ExecuteSQL 함수를 사용하여 다음 계산에서 쿼리문을 지정합니다.
Round(
100 * Salaries::Salary / ExecuteSQL(
"SELECT SUM(S.Salary)
FROM Employees E
JOIN Salaries S
ON E.EmpID = S.EmpID
WHERE E.Department = ?";
""; ""; Employees::Department
) ;
2)
참고 이 계산에서는 Salary 테이블(Salaries::Salary)의 직원 월급이 필요하므로, 관계형 그래프에서 Employees::EmpID와 Salarys::EmpID 필드 간에 관계를 생성해야 합니다(관계 생성 및 변경하기 참조). 그에 반해서, ExecuteSQL 함수는 관계형 그래프를 사용하지 않습니다. 따라서 이 예에서 JOIN 절은 ExecuteSQL의 SELECT 문에서 사용되는 관계를 설정합니다.
각 직원 레코드에서 Percent Dept Salaries 필드는 직원 부서의 월급 합계에 비례한 직원의 월급의 백분율을 계산합니다.
직원 | |||
---|---|---|---|
EmpID | 성 | Department | Percent Dept Salaries |
1 | Smith | 개발 | 52.97 |
2 | Ogawa | 개발 | 47.03 |
3 | Durand | 품질 | 48.86 |
4 | Garcia | 품질 | 51.14 |
5 | Mehmet | 서류 | 100 |
6 | Ferrini | 마케팅 | 100 |