복붙노트

[SQL] SELECT 문에서 부울 유형을 사용하는 방법

SQL

SELECT 문에서 부울 유형을 사용하는 방법

나는 매개 변수 BOOLEAN와 PL / SQL 기능을 가지고 :

function get_something(name in varchar2, ignore_notfound in boolean);

이 기능은 타사 도구의 일부입니다, 나는 이것을 변경할 수 없습니다.

나는이 같은 SELECT 문 내에서이 기능을 사용하고 싶습니다 :

 select get_something('NAME', TRUE) from dual;

이것은 내가이 예외가 작동하지 않습니다 :

내가 알고있는 것처럼, 키워드 TRUE가 인식되지 않습니다.

어떻게이 일을 할 수 있습니까?

해결법

  1. ==============================

    1.이 같은 래퍼 함수를 ​​구축 할 수 있습니다 :

    이 같은 래퍼 함수를 ​​구축 할 수 있습니다 :

    function get_something(name in varchar2,
                       ignore_notfound in varchar2) return varchar2
    is
    begin
        return get_something (name, (upper(ignore_notfound) = 'TRUE') );
    end;
    

    다음 전화 :

    select get_something('NAME', 'TRUE') from dual;
    

    그것은 ignore_notfound의 유효한 값이 버전에서 무엇 당신까지, 나는 'TRUE'는 진정한 아무것도 다른 수단에 FALSE를 가정 하였다.

  2. ==============================

    2.당신은 확실히 당신은 부울 데이터 유형을 사용할 수 없습니다 SELECT 쿼리에서 부울 값을 얻을 수 있습니다.

    당신은 확실히 당신은 부울 데이터 유형을 사용할 수 없습니다 SELECT 쿼리에서 부울 값을 얻을 수 있습니다.

    당신은 1/0로 부울을 나타낼 수 있습니다.

    CASE WHEN (10 > 0) THEN 1  ELSE 0 END (It can be used in SELECT QUERY)
    
    SELECT CASE WHEN (10 > 0) THEN 1  ELSE 0 END AS MY_BOOLEAN_COLUMN
      FROM DUAL
    

    반환, 1 (등 최대 절전 모드 / MyBatis로 / 1은 사실이다). 그렇지 않으면, 당신은 SELECT에서 인쇄 부울 값을 얻을 수 있습니다.

    SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN
     FROM DUAL
    

    이것은 '사실'문자열을 반환합니다.

  3. ==============================

    3.문서에서 :

    문서에서 :

    당신은 SQL 데이터 형식을 취 래퍼 기능을 대신 사용해야합니다.

  4. ==============================

    4.이 옵션을 선택합니다 : http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284

    이 옵션을 선택합니다 : http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284

  5. ==============================

    5.

    select get_something('NAME', sys.diutil.int_to_bool(1)) from dual;
    
  6. ==============================

    6.데이터베이스에이를 컴파일하고 쿼리에 부울 문을 사용하여 시작합니다.

    데이터베이스에이를 컴파일하고 쿼리에 부울 문을 사용하여 시작합니다.

    참고 : 함수의 get의 VARCHAR2의 PARAM은, 그래서 당신의 문에있는 "문자열"을 포장해야합니다. 그것은 거짓에 대한 진정한 1과 0을 반환합니다;

    select bool('''abc''<''bfg''') from dual;
    
    CREATE OR REPLACE function bool(p_str in varchar2) return varchar2 
     is
     begin
    
     execute immediate ' begin if '||P_str||' then
              :v_res :=  1;
           else
              :v_res :=  0;
           end if; end;' using out v_res;
    
           return v_res;
    
     exception 
      when others then 
        return '"'||p_str||'" is not a boolean expr.';
     end;
    /
    
  7. ==============================

    7.오라클 (12)와 함께, 당신은 당신의 보조 기능을 선언 할 WITH 절을 사용할 수 있습니다. 나는 당신의 get_something 기능 반환 VARCHAR2를 가정하고 있습니다 :

    오라클 (12)와 함께, 당신은 당신의 보조 기능을 선언 할 WITH 절을 사용할 수 있습니다. 나는 당신의 get_something 기능 반환 VARCHAR2를 가정하고 있습니다 :

    with
      function get_something_(name varchar2, ignore_notfound number)
      return varchar2 
      is
      begin
        -- Actual function call here
        return get_something(name, not ignore_notfound = 0);
      end get_something_;
    
      -- Call auxiliary function instead of actual function
    select get_something_('NAME', 1) from dual;
    

    이 답변에서와 같이 물론, 당신은 또한 스키마에 보조 기능 어딘가에 저장 한 수 있지만 WITH를 사용하여, 당신은 어떤 외부 종속성 그냥이 쿼리를 실행할 필요가 없습니다. 여기 더 자세히이 기술에 대해 블로그했습니다.

  8. ==============================

    8.음주 Oracle-- PL / SQL과 BOOLEAN를 사용하지 벙어리이며 작동하지 않습니다 : 간단히 말해서이 질문에 대한 답이다. 프로세스를 실행하는 다른 데이터 유형을 사용합니다.

    음주 Oracle-- PL / SQL과 BOOLEAN를 사용하지 벙어리이며 작동하지 않습니다 : 간단히 말해서이 질문에 대한 답이다. 프로세스를 실행하는 다른 데이터 유형을 사용합니다.

    SSRS에 대한 메모가 오라클 데이터 소스 개발자를보고 : 당신은 부울 매개 변수를 사용하지만, 구현 방법을주의 할 수있다. 오라클 PL / SQL은 BOOLEAN과 잘 재생되지 않습니다,하지만 당신은 당신의 데이터 세트의 데이터가 상주하는 경우 테이블 릭스 필터에 부울 값을 사용할 수 있습니다. 내가 오라클 데이터 소스와의 BOOLEAN 매개 변수를 사용했기 때문에 이건 정말, 나를 넘어. 그러나 해당 인스턴스에 나는 테이블 릭스 데이터가 아닌 SQL 쿼리에 대해 필터링되었다.

    데이터가 SSRS 데이터 집합 필드가 아닌 경우에는 정수 매개 변수를 사용하여이 같은 SQL 뭔가를 다시 작성할 수 있습니다 :

    __

    <ReportParameter Name="paramPickupOrders">
      <DataType>Integer</DataType>
      <DefaultValue>
        <Values>
          <Value>0</Value>
        </Values>
      </DefaultValue>
      <Prompt>Pickup orders?</Prompt>
      <ValidValues>
        <ParameterValues>
          <ParameterValue>
            <Value>0</Value>
            <Label>NO</Label>
          </ParameterValue>
          <ParameterValue>
            <Value>1</Value>
            <Label>YES</Label>
          </ParameterValue>
        </ParameterValues>
      </ValidValues>
    </ReportParameter>
    
    ...
    
    <Query>
    <DataSourceName>Gmenu</DataSourceName>
    <QueryParameters>
      <QueryParameter Name=":paramPickupOrders">
        <Value>=Parameters!paramPickupOrders.Value</Value>
      </QueryParameter>
    <CommandText>
        where 
            (:paramPickupOrders = 0 AND ordh.PICKUP_FLAG = 'N'
            OR :paramPickupOrders = 1 AND ordh.PICKUP_FLAG = 'Y' )
    

    데이터가 SSRS 데이터 집합 필드에있는 경우, 당신은 부울 매개 변수를 사용하여 테이블 릭스 필터를 사용할 수 있습니다 :

    __

    </ReportParameter>
    <ReportParameter Name="paramFilterOrdersWithNoLoad">
      <DataType>Boolean</DataType>
      <DefaultValue>
        <Values>
          <Value>false</Value>
        </Values>
      </DefaultValue>
      <Prompt>Only orders with no load?</Prompt>
    </ReportParameter>
    
    ...
    
    <Tablix Name="tablix_dsMyData">
    <Filters>
      <Filter>
        <FilterExpression>
            =(Parameters!paramFilterOrdersWithNoLoad.Value=false) 
            or (Parameters!paramFilterOrdersWithNoLoad.Value=true and Fields!LOADNUMBER.Value=0)
        </FilterExpression>
        <Operator>Equal</Operator>
        <FilterValues>
          <FilterValue DataType="Boolean">=true</FilterValue>
        </FilterValues>
      </Filter>
    </Filters>
    
  9. ==============================

    9.어떻게 TRUE (또는 FALSE)로 평가 식을 사용하는 방법에 대해?

    어떻게 TRUE (또는 FALSE)로 평가 식을 사용하는 방법에 대해?

    select get_something('NAME', 1 = 1) from dual
    
  10. ==============================

    10.PL / SQL은 TRUE가 유효한 식별자 또는 가변 아니라는 것을 불평한다. 로컬 변수를 설정 TRUE로 설정하고 get_something 함수로 전달한다.

    PL / SQL은 TRUE가 유효한 식별자 또는 가변 아니라는 것을 불평한다. 로컬 변수를 설정 TRUE로 설정하고 get_something 함수로 전달한다.

  11. from https://stackoverflow.com/questions/1465405/how-to-use-boolean-type-in-select-statement by cc-by-sa and MIT license