我想要一些t-sql语法正确的以下版本(希望以下是人类可读的)
CREATE OR REPLACE PACKAGE BODY COP_DBO.PACKAGE_TEMPLATE
AS
--
--*****************************************************************************************************
-- Purpose: Just a template
--
-- Inputs:
-- in_vSTR String
--
-- Returns:
-- None
--
-- Mod History:
-- 06/29/2016 KEvin Palmer - Created initial version of this procedure
--
-- Error Handling:
-- An error is raised if errors are encountered building or executing the SQL.
--
--*****************************************************************************************************
f UTL_FILE.FILE_TYPE;
s VACHAR2(200);
BEGIN
f := UTL_FILE.FOPEN('\\sp0034avrt\winixdb$\cow\dev', 'certs_file.txt', 'R');
UTL_FILE.GET_LINE(f,s);
UTL_FILE.FLCOSE(f);
dbms_outpit.put_line(s);
end;
sql_statments arr_sql_t := arr_sql_t(); --initialize a empty lis
--------------------------------------------------------------------------------
/* PROCEDURE AND VARIABLE
INITILIZATION FOR COW_DATALOAD_V2
/***************************************************************************/
------------------------------------------------------------------------------
--*********** PUT YOUR LIST OF CERTS BELOW ******************
v_certList arr_claims_t := arr_claims_t('3803617642',
'3805126441',
'3876849047',
'3873116383',
'3873306670',
'3878876718');
--COP VARIABLES---
new_copId NUMBER; --NEW COP ID
prod_copId NUMBER; --PROD COP ID
new_seq_id NUMBER; --NEW SEQ ID
suppl_count NUMBER; --supplemental count
v_SQL VARCHAR2(7000);
v_certLst VARCHAR2(2000);
n_success NUMBER := 0; --Count of success found
n_total NUMBER := 0; --Total Records proccessed
n_suppl NUMBER := 0; --Total Records proccessed
n_orders NUMBER := 0; --Total lmso orders downloaded
/*cop procedure*/
PROCEDURE COP_DATALOAD_V2(arr_claims arr_claims_t,
arr_sql arr_sql_t) AS
BEGIN
答案 0 :(得分:4)
NULL
或者,如果T2.c永远不会是SELECT
T1.my_column,
T2.my_other_column
FROM
Table1 T1
INNER JOIN Table2 T2 ON
T2.a = T1.a AND
T2.b = T1.b AND
T2.c = COALESCE(T1.c, T2.c)
:
COALESCE
由于可读性,我喜欢第一种。
编辑:
T1.c
将第一个非null参数传递给函数。因此,如果上面的NULL
为T2.c
,则会返回T2.c
。如果NULL
也是NULL = NULL
,那么它会尝试评估COALESCE(T2.c, -1) = COALESCE(T1.c, T2.c, -1)
,这将是 false 。
你可以通过JOIN
来解决这个问题,但是SQL无法很好地使用索引。
如果您希望他们NULL
都(
(T2.c IS NULL AND T1.c IS NULL) OR
T2.c = T1.c
)
,那么您可以使用上面的位,或者只拼出每个可能的组合:
{{1}}
答案 1 :(得分:1)
通常可以提供更好性能的技巧
SELECT
T1.my_column,
T2.my_other_column
FROM
Table1 T1
JOIN Table2 T2
ON T2.a = T1.a
AND T2.b = T1.b
AND T2.c = isnull(T1.c, T2.c)
答案 2 :(得分:0)
使用此功能。
select* from table1
join table2
on table1.a = table2.a
and table1.b = table2.b
and (table1.c is not null or table1.c = table2.c)