스크립트에서 테이블 쿼리

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기12분
  • GlideRecord API의 메서드를 사용하여 테이블에서 모든 기록을 반환하거나, 테이블에서 특정 조건을 만족하는 기록을 반환하거나, 단일 테이블 또는 텍스트 인덱스 그룹의 여러 테이블에서 문자열을 포함하는 기록을 반환할 수 있습니다.

    GlideRecord API를 사용하여 테이블을 쿼리합니다. API 참조는 GlideRecord - 범위 지정을 참조하십시오.

    테이블에서 모든 기록 반환

    테이블을 쿼리하려면 먼저 GlideRecord 객체를 생성합니다. GlideRecord를 생성하려면 스크립트에서 다음을 생성합니다.
    var target = new GlideRecord('incident');

    GlideRecord를 만들면 인시던트 테이블의 GlideRecord 객체인 대상 변수가 생성됩니다.

    인시던트 테이블의 모든 기록을 처리하려면 다음 스크립트를 추가하십시오.
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    이 스크립트는 데이터베이스에 query() 를 실행합니다. next()에 대한 각 호출은 처리를 위해 다음 레코드를 로드합니다.

    쿼리 조건을 만족하는 테이블에서 기록 반환

    대부분의 경우 특정 기록 또는 특정 기록 세트를 검색하려고 하며 가져오려는 기록을 정의하는 몇 가지 기준(쿼리 조건)이 있습니다. 예를 들어, 우선순위 값이 1인 모든 인시던트 기록을 가져오려고 한다고 가정해 보겠습니다. 다음은 이를 수행하는 코드입니다.
    var target = new GlideRecord('incident'); 
    target.addQuery('priority',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    예제 스크립트에는 target.addQuery('priority', 1);가 포함되어 있습니다. 이 줄은 필드가 1인 기록 priority 만 원한다는 것을 나타냅니다. 일반적으로 수행하려는 대부분의 쿼리는 같음 쿼리입니다. 값이 같은 필드를 가진 기록을 찾으려는 쿼리입니다. 따라서 같음 연산자를 제공할 필요가 없습니다. 그러나 필드가 1보다 큰 모든 인시던트를 찾고 싶다고 priority 가정해 보겠습니다. 이 경우 쿼리에 적용할 연산자를 제공합니다.
    var target = new GlideRecord('incident') ; 
    target.addQuery('priority','>',1);
    target.query(); // Issue the query to the database to get relevant records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    문자열이 포함된 테이블에서 기록 반환

    "123TEXTQUERY321" 예약된 이름을 사용하여 테이블의 모든 필드에서 문자열 일치를 검색합니다. 예를 들어 이 스크립트는 'email' 문자열이 포함된 필드 값이 있는 인시던트 테이블의 기록을 반환합니다.

    var now_GR = new GlideRecord('incident');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.query();

    '123TEXTQUERY321'addQuery() 메서드의 name 매개변수에 대해 예약된 옵션입니다. 인코딩된 쿼리 문자열에서 이 옵션을 사용할 수 있습니다. 예를 들어 gr.addQuery('123TEXTQUERY321', 'email'); 대신 gr.addEncodedQuery('123TEXTQUERY321=email')를 사용할 수 있습니다.

    문자열 검색은 대/소문자를 구분하지 않습니다. 시스템은 이메일, 이메일 또는 이메일 중 무엇을 검색하든 동일한 결과를 반환합니다.

    주:
    문자열 검색을 사용하여 쿼리하려면 먼저 검색하려는 테이블에 대해 텍스트 인덱싱(및 선택적으로 검색 속성)을 구성해야 합니다. 자세한 내용은 인덱싱 및 검색을 위한 단일 테이블 구성을 참조하세요.

    문자열을 포함하는 텍스트 인덱스 그룹의 여러 테이블에서 기록 반환

    '123TEXTINDEXGROUP321' 예약된 이름을 사용하여 텍스트 인덱스 그룹의 테이블에서 문자열을 검색합니다. 이 옵션은 텍스트 인덱스 그룹의 설정을 사용하여 계산된 관련성 점수가 있는 결과를 반환합니다.

    주:
    텍스트 인덱스 그룹에서는 한 번에 하나의 테이블만 쿼리할 수 있습니다. 여러 단일 테이블 쿼리를 실행하고 해당 결과를 병합하여 관련성 점수별로 정렬하려는 경우 이 옵션을 사용합니다. 이 옵션의 장점은 개별 테이블 쿼리에 대한 검색 결과 관련성 점수가 텍스트 인덱스 그룹의 모든 테이블에 대해 일관되게 정규화된다는 것입니다.
    예를 들어 이 스크립트는 키워드 '이메일'이 포함된 지식베이스 테이블의 기록을 반환하며, '포털' 인덱스 그룹에 대해 계산된 관련성 점수가 있습니다.
    var now_GR = new GlideRecord('kb_knowledge');
    gr.addQuery('123TEXTQUERY321', 'email');
    gr.addQuery('123TEXTINDEXGROUP321', 'portal');
    gr.query();

    검색하려는 '포털' 인덱스 그룹의 각 추가 테이블에 대해 유사한 쿼리를 만든 다음 개별 쿼리의 결과를 병합하여 관련성 점수가 가장 높은 결과를 먼저 표시할 수 있습니다. 이러한 모든 검색 쿼리는 동일한 텍스트 인덱스 그룹 검색 설정을 사용하기 때문에 결과의 관련성 점수는 모두 일관되게 정규화됩니다. gr.addQuery('123TEXTINDEXGROUP321', 'portal') 메서드를 사용하지 않고 동일한 테이블 세트를 검색한 경우 개별 쿼리의 관련성 점수가 다르게 정규화되며 병합된 결과 세트를 정렬하는 데 유용한 기준이 되지 않습니다.

    '123TEXTINDEXGROUP321'addQuery() 메서드의 매개 변수에 대해 name 예약된 옵션입니다. 인코딩된 쿼리 문자열에서 이 옵션을 사용할 수 있습니다. 예를 들어 gr.addQuery('123TEXTINDEXGROUP321', 'portal'); 대신 gr.addEncodedQuery('123TEXTINDEXGROUP321=portal')를 사용할 수 있습니다.

    다중 테이블 문자열 검색은 대/소문자를 구분하지 않습니다. 시스템은 이메일, 이메일 또는 이메일 중 무엇을 검색하든 동일한 결과를 반환합니다.

    주:
    인덱스 그룹의 테이블을 쿼리하려면 먼저 해당 테이블에 대한 텍스트 인덱싱 및 검색 특성을 구성하고 인덱스 그룹에 포함해야 합니다. 자세한 내용은 인덱싱 및 검색을 위한 여러 테이블 구성을 참조하세요. 인덱스 그룹의 모든 테이블은 V4 인덱싱 형식을 사용해야 합니다.

    사용 가능한 JavaScript 연산자

    addQuery() 요청 내에서 사용할 수 있는 연산자에 대해 설명합니다.

    표 1. 사용 가능한 JavaScript 연산자
    필드 정의 추가 쿼리
    = 필드는 제공된 값과 같아야 합니다. addQuery('우선순위', '=', 1);
    > 필드는 제공된 값보다 커야 합니다. addQuery('우선순위', '>', 1);
    < 필드는 제공된 값보다 작아야 합니다. addQuery('우선순위', '<', 3);
    >= 필드는 제공된 값보다 크거나 같아야 합니다. addQuery('우선순위', '>=', 1);
    <= 필드는 제공된 값보다 작거나 같아야 합니다. addQuery('우선순위', '<=', 3);
    != 필드는 제공된 값과 같을 수 없습니다. addQuery('우선순위', '!=', 1);
    STARTSWITH 필드는 제공된 값으로 시작해야 합니다. 오른쪽에 표시된 예는 short_description 필드가 Error 텍스트로 시작하는 모든 레코드를 반환합니다. addQuery('short_description', 'STARTSWITH', '오류');
    포함 필드는 텍스트 어딘가에 제공된 값을 포함해야 합니다. 오른쪽에 표시된 예는 short_description 필드에 필드의 아무 곳에나 Error 텍스트가 포함된 모든 레코드를 반환합니다.
    주:
    LIKE 연산은 지원되지 않습니다. 관리자는 쿼리에 CONTAINS를 사용해야 합니다.
    addQuery('short_description', 'CONTAINS', '오류');
    IN 쉼표를 허용하는 값 맵을 만들고 다른 요구 사항을 충족하는 기록 컬렉션을 수집합니다. Select * from <table> where short_description IN ('Error', 'Success', 'Failure')로 동작하며, 이는 Select * from <table> where short_description='Error'와 동일합니다. 예를 들어, 특정 활동에 속하는 모든 변수 값을 쿼리하려면 절을 사용하고 IN 해당 sys_ids 맵 또는 쉼표로 구분된 목록에 저장합니다. 그런 다음 변수 값 테이블을 쿼리하고 이 sys_ids 목록을 제공합니다. addQuery('short_description', 'IN', '오류,성공,실패');
    ENDSWITH 필드는 제공된 값으로 끝나야 합니다. 오른쪽에 표시된 예는 short_description 필드가 Error 텍스트로 끝나는 모든 레코드를 반환합니다. addQuery('short_description', 'ENDSWITH', '오류');
    포함하지 않음 필드의 패턴과 일치하지 않는 기록을 선택합니다. 이 연산자는 빈 필드를 검색하지 않습니다. 빈 값의 경우 "비어 있음" 또는 "비어 있지 않음" 연산자를 사용합니다. 오른쪽에 표시된 예에서는 short_description 필드에 "오류"라는 단어가 없는 모든 레코드를 반환합니다. addQuery('short_description', '포함하지 않음', '오류');
    에 없음 쉼표를 허용하는 값 맵을 만들고 다른 요구 사항을 충족하는 기록 컬렉션을 수집합니다. 다음과 같이 동작합니다. Select * from <table> where short_description NOT IN ("Error") ("오류") addQuery('short_description', 'NOT IN', '오류,성공,실패');
    인스턴스의 확장 테이블에 대해 지정된 "클래스"의 기록만 검색하는 특수 연산자입니다. 오른쪽의 코드 예제에서는 컴퓨터로 분류된 모든 구성 항목을 검색하는 방법을 보여 줍니다. addQuery('sys_class_name', '인스턴스오프', 'cmdb_ci_computer');

    필터 및 쿼리에 사용할 수 있는 연산자에 대한 자세한 내용은 다음을 참조하십시오 Operators available for filters and queries.

    NULL 또는 NOT NULL인 데이터를 검색하는 데 사용할 수 있는 몇 가지 특수 메서드도 있습니다. short_description 필드가 제공되지 않은 모든 인시던트(null)를 검색하려면 다음 쿼리를 사용합니다.
    var target = new GlideRecord('incident'); 
    target.addNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }
    short_description가 제공된 모든 인시던트를 찾으려면 다음 쿼리를 사용합니다.
    var target = new GlideRecord('incident'); 
    target.addNotNullQuery('short_description');
    target.query(); // Issue the query to the database to get all records 
    while (target.next()) { 
      // add code here to process the incident record 
    }

    GlideRecord API 및 사용 가능한 메서드에 대한 자세한 내용은 GlideRecord 단원을 참조하십시오.

    GlideRecord 쿼리 예시

    이 예는 다양한 GlideRecord 쿼리를 수행하는 방법을 보여줍니다.

    쿼리

    var rec = new GlideRecord('incident');
    rec.query(); 
    while(rec.next()) { 
      gs.print(rec.number + ' exists'); }

    업데이트

    var rec = new GlideRecord('incident');
    rec.addQuery('active',true);
    rec.query(); 
    while(rec.next()) { 
      rec.active = false;
      gs.print('Active incident ' + rec.number = ' closed');
      rec.update(); }

    삽입

    var rec = new GlideRecord('incident');
    rec.initialize();
    rec.short_description = 'Network problem'; 
    rec.caller_id.setDisplayValue('Joe Employee'); 
    rec.insert();

    삭제

    var rec = new GlideRecord('incident');
    rec.addQuery('active',false);
    rec.query(); 
    while(rec.next()) { 
      gs.print('Inactive incident ' + rec.number + ' deleted');
      rec.deleteRecord(); }

    서비스 카탈로그 테이블 쿼리 중

    서비스 카탈로그 요청 항목 테이블 [sc_req_item]의 변수를 직접 쿼리할 수 없습니다. 대신 변수 이름과 값에 대한 쿼리를 각각 하나씩 추가하여 변수 소유권 테이블 [sc_item_option_mtom]을 쿼리합니다. 이 쿼리는 다대다 관계를 반환하며, 사용자는 요청된 항목에 닷워킹을 수행할 수 있습니다. 다음 예에서는 값이 item_value인 변수 item_name가 있는 요청 항목을 찾아 요청 항목 번호를 표시합니다.
    var now_GR = new GlideRecord('sc_item_option_mtom');
    gr.addQuery('sc_item_option.item_option_new.name','item_name');
    gr.addQuery('sc_item_option.value','item_value');
    gr.query();
     
    while(gr.next()) {
      gs.addInfoMessage(gr.request_item.number); }

    자세한 내용은 GlideRecord 문서를 참조하십시오.