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 함수를 만들어야 합니다.SQL
datatat을 입력하고 대신 사용합니다.
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
'your programing' 카테고리의 다른 글
jq를 사용하여 임의의 단순 JSON을 CSV로 변환하려면 어떻게 해야 합니까? (0) | 2023.04.02 |
---|---|
node.js를 사용하여 JSON을 통한 루프 (0) | 2023.04.02 |
각지다.JS: 동일한 컨트롤러를 공유하는 뷰, 뷰 변경 시 모델 (0) | 2023.04.02 |
WooCommerce 함수에 WP/WC 인수 누락 (0) | 2023.04.02 |
지시 템플릿 내의 DOM 요소에 액세스하는 AngularJS (0) | 2023.04.02 |