your programing

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

lovepro 2023. 4. 2. 12:33
반응형

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

파라미터에 BOUAL을 사용하는 PL/SQL 함수가 있습니다.

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

이 기능은 서드파티 툴의 일부이므로 변경할 수 없습니다.

다음과 같은 SELECT 문에서 이 기능을 사용하고 싶습니다.

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

이것은 동작하지 않습니다.다음 예외가 발생합니다.

ORA-00904: "TRUE": 잘못된 식별자

제가 알기로는 키워드TRUE인식되지 않습니다.

어떻게 하면 될까요?

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을 반환합니다(Hibernate/Mybatis/etc 1은 true).그렇지 않으면 SELECT에서 인쇄 가능한 부울 값을 얻을 수 있습니다.

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

그러면 문자열이 반환됩니다.'true'.

다음과 같이 래퍼 기능을 구축할 수 있습니다.

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'가 TRUE를 의미하고 다른 것은 FALSE를 의미합니다.

문서부터:

값을 삽입할 수 없습니다.TRUE그리고.FALSE데이터베이스 열로 변환합니다.열 값을 선택하거나 가져올 수 없습니다.BOOLEAN변수.에서 호출된 함수SQL쿼리는 받을 수 없습니다.BOOLEAN파라미터를 지정합니다.둘 다 내장할 것SQL다음과 같은 기능TO_CHAR나타내다BOOLEAN출력에 있는 값, 반드시 사용해야 합니다.IF-THEN또는CASE번역할 구성BOOLEAN값을 다른 유형으로 변환합니다.0또는1,'Y'또는'N','true'또는'false'기타 등등.

Wrapper 함수를 만들어야 합니다.SQLdatatat을 입력하고 대신 사용합니다.

BOUALE 데이터 유형은 PL/SQL 데이터 유형입니다.Oracle은 동등한 SQL 데이터 유형(...)을 제공하지 않습니다. SQL 유형을 BOUAL 유형에 매핑하는 래퍼 함수를 만들 수 있습니다.

http://forums.datadirect.com/ddforums/thread.jspa?threadID=1771&tstart=0&messageID=5284 를 확인해 주세요.

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

이를 데이터베이스로 컴파일하고 쿼리에서 boolean 문을 사용하기 시작합니다.

주의: 함수의 get은 varchar2 파라미터이므로, 반드시 스테이트먼트에 "sublic"을 랩하십시오.true의 경우 1, false의 경우 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;
/

Oracle 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이 쿼리를 실행하기 위한 외부 의존관계는 없습니다.는 이 기술에 대해 더 자세히 블로그에 올렸습니다.

이 질문에 대한 답은 간단히 말하면 다음과 같습니다.Oracle에서 BOUAL을 사용하지 마십시오. PL/SQL은 멍청하며 작동하지 않습니다.다른 데이터 유형을 사용하여 프로세스를 실행합니다.

Oracle 데이터 소스를 사용하는 SSRS 보고서 개발자에 대한 메모:BOUAL 파라미터를 사용할 수 있지만 구현 방법에 주의하십시오.Oracle PL/SQL은 BOUAL과 함께 제대로 작동하지 않지만 데이터가 데이터 집합에 있는 경우 Tablix 필터에서 BOUAL 값을 사용할 수 있습니다.Oracle 데이터 소스와 함께 BOUAL 매개 변수를 사용했기 때문에 이 때문에 문제가 발생했습니다.그러나 이 경우 SQL 쿼리가 아닌 Tablix 데이터에 대해 필터링을 수행했습니다.

데이터가 SSRS 데이터 세트 필드에 없는 경우 INTEGER 매개 변수를 사용하여 다음과 같은 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 데이터 세트필드에 있는 경우 BOUAL 파라미터와 함께 tablix 필터를 사용할 수 있습니다.

__

</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>

TRUE(또는 FALSE)로 평가되는 식을 사용하면 어떨까요?

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

PL/SQL에서 TRUE가 유효한 식별자 또는 변수가 아니라고 보고 있습니다.로컬 변수를 설정하고 TRUE로 설정한 후 get_something 함수에 전달합니다.

언급URL : https://stackoverflow.com/questions/1465405/how-to-use-boolean-type-in-select-statement

반응형