SELECT 문에서 BOOLEAN 유형을 사용하는 방법
매개 변수에 BOOLEAN이있는 PL / SQL 함수가 있습니다.
function get_something(name in varchar2, ignore_notfound in boolean);
이 기능은 타사 도구의 일부이므로 변경할 수 없습니다.
다음과 같은 SELECT 문 내에서이 함수를 사용하고 싶습니다.
select get_something('NAME', TRUE) from dual;
작동하지 않습니다.이 예외가 발생합니다.
ORA-00904 : "TRUE": 유효하지 않은 식별자
알기 때문에 키워드 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를 의미한다고 가정했습니다.
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이 참). 그렇지 않으면 SELECT에서 인쇄 가능한 부울 값을 가져올 수 있습니다.
SELECT CASE WHEN (10 > 0) THEN 'true' ELSE 'false' END AS MY_BOOLEAN_COLUMN
FROM DUAL
이것은 문자열을 반환합니다 'true'
.
에서 문서 :
값
TRUE
을FALSE
데이터베이스 열에 삽입 할 수 없습니다 . 열 값을 선택하거나BOOLEAN
변수 로 가져올 수 없습니다 .SQL
쿼리 에서 호출 된 함수는BOOLEAN
매개 변수를 사용할 수 없습니다 . 다음SQL
과 같은 내장 함수 도 사용할 수 없습니다TO_CHAR
.BOOLEAN
출력에서 값 을 나타내 려면IF-THEN
또는CASE
구문을 사용 하여BOOLEAN
값을0
or1
,'Y'
또는'N'
,'true'
또는 등과 같은 다른 유형으로 변환 해야합니다'false'
.
SQL
데이터 유형을 대신 사용 하는 래퍼 함수를 만들어야합니다 .
BOOLEAN 데이터 유형은 PL / SQL 데이터 유형입니다. Oracle은 SQL 유형을 BOOLEAN 유형에 매핑하는 래퍼 함수를 만들 수있는 동등한 SQL 데이터 유형 (...)을 제공하지 않습니다.
이것을 확인하십시오 : 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;
이것을 데이터베이스에서 컴파일하고 쿼리에서 부울 문 사용을 시작하십시오.
참고 : get 함수는 varchar2 매개 변수이므로 명령문에서 "문자열"을 래핑해야합니다. 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과 함께 BOOLEAN을 사용하지 마십시오. PL / SQL은 멍청하고 작동하지 않습니다. 다른 데이터 유형을 사용하여 프로세스를 실행하십시오.
Oracle 데이터 원본 을 사용 하는 SSRS 보고서 개발자를위한 참고 사항 : BOOLEAN 매개 변수를 사용할 수 있지만 구현 방법에주의하십시오. Oracle PL / SQL은 BOOLEAN과 잘 작동하지 않지만 데이터가 데이터 세트에있는 경우 테이블 릭스 필터에서 BOOLEAN 값을 사용할 수 있습니다. Oracle 데이터 소스와 함께 BOOLEAN 매개 변수를 사용했기 때문에 이것은 정말로 나를 넘어졌습니다. 하지만이 경우 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 데이터 세트 필드에있는 경우 BOOLEAN 매개 변수와 함께 테이블 릭스 필터를 사용할 수 있습니다.
__
</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>
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
하면이 쿼리를 실행하기위한 외부 종속성이 없습니다. 이 기술에 대해 여기에서 더 자세히 블로그에 올렸습니다 .
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
'IT이야기' 카테고리의 다른 글
Cobertura를 사용하여 코드 검사에서 메서드 제외 (0) | 2021.04.08 |
---|---|
C ++ 싱글 톤 대 전역 정적 개체 (0) | 2021.04.08 |
std :: string 구현 (0) | 2021.04.08 |
SQL IN 연산자에 해당하는 linq는~? (0) | 2021.04.08 |
ASP.NET MVC3의 부분보기에서 ViewBag에 액세스 할 수 없습니다. (0) | 2021.04.08 |