Reputation: 347
I have a SQL Server T-SQL query that I need to translate to Oracle PL-SQL.
My SQL Server query is:
DECLARE @inputData
BEGIN
SELECT @inputData = column_name
FROM table;
END
What does select DECLARE variable = column_name from any table
do?
EDIT
I have tried on my own to research this but cannot a find proper explanation. SOme of so called expert here did not like the small block of code here is my entire procedure which I am trying to translate for oracle.
USE [Mon422_GA]
GO
/****** Object: StoredProcedure [dbo].[p_DisbAmtCheck] Script Date: 1/18/2017 11:33:19 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[p_DisbAmtCheck]
(
@amount decimal(18,2),
@type nvarchar(10),
@id int,
@app_id int,
@loan_id int,
@disb_fee_id int = 0,
@disb_cs_fees nvarchar(255) = '0'
)
AS
BEGIN
DECLARE @TOTAL_DISB decimal(18,2), @DISB_DISB decimal(18,2), @FEE_DISB decimal(18,2),
@WRK_TOTAL decimal(18,2), @CUR_DISB decimal(18,2), @FEE_CLOSE char(1),
@FEE_FIN char(1), @TMP_SQL nvarchar(512)
SET @TOTAL_DISB = 0.00
SET @DISB_DISB = 0.00
SET @FEE_DISB = 0.00
SET @WRK_TOTAL = 0.00
SET @CUR_DISB = 0.00
IF @type NOT LIKE 'cs_disb'
BEGIN
SELECT @DISB_DISB = SUM(d.disburse_amt)
FROM t_ccs_disburse d, t_ccs_loan_disburse_rel ldr, t_ccs_app_loan_rel alr
WHERE ldr.disburse_id = d.disburse_id AND ldr.loan_id = alr.loan_id
AND alr.app_id = @app_id AND alr.loan_id = @loan_id
AND d.disburse_loan_fee_ind != 'F'
END
IF @DISB_DISB IS NULL
SET @DISB_DISB = 0.00
IF @type NOT LIKE 'cs_fee'
BEGIN
SET @TMP_SQL = 'SELECT SUM(f.fee_amt)
FROM t_ccs_fee f, t_ccs_app_fee_rel r
WHERE r.fee_id = f.fee_id
AND r.app_id = ' + CONVERT(NVARCHAR, @app_id) +
' AND r.loan_id = ' + CONVERT(NVARCHAR, @loan_id) + '
AND (fee_financed_yn = ''Y'' OR fee_collect_at_closing_yn = ''Y'')
AND f.fee_id NOT IN ('
IF LEN(@disb_cs_fees) > 0
SET @TMP_SQL = @TMP_SQL + @disb_cs_fees + ')'
ELSE
SET @TMP_SQL = @TMP_SQL + '0)'
EXEC ('DECLARE fees CURSOR FOR '+ @TMP_SQL)
OPEN fees
FETCH NEXT FROM fees INTO @FEE_DISB
CLOSE fees
DEALLOCATE fees
END
IF @FEE_DISB IS NULL
SET @FEE_DISB = 0.00
SELECT @TOTAL_DISB = ln_amount FROM t_ccs_loan WHERE loan_id = @loan_id
IF @TOTAL_DISB IS NULL
SET @TOTAL_DISB = 0.00
SET @WRK_TOTAL = @DISB_DISB + @FEE_DISB + @amount
IF @WRK_TOTAL IS NULL
SET @WRK_TOTAL = 0.00
IF @id > 0
BEGIN
IF @type LIKE 'fee'
SELECT @CUR_DISB = fee_amt FROM t_ccs_fee WHERE fee_id = @id
ELSE IF @type LIKE 'disb'
SELECT @CUR_DISB = disburse_amt FROM t_ccs_disburse WHERE disburse_id = @id
ELSE
SET @CUR_DISB = 0.00
IF @CUR_DISB IS NULL
SET @CUR_DISB = 0.00
END
ELSE
BEGIN
SET @CUR_DISB = 0.00
IF @type LIKE 'disb'
BEGIN
-- check to see if this fee is financed or collect at close if so subtract from total
SELECT @FEE_FIN = fee_financed_yn, @FEE_CLOSE = fee_collect_at_closing_yn
FROM t_ccs_fee WHERE fee_id = @disb_fee_id
IF @FEE_FIN = 'Y' OR @FEE_CLOSE = 'Y'
SET @WRK_TOTAL = @WRK_TOTAL - @amount
END
END
SET @WRK_TOTAL = @WRK_TOTAL - @CUR_DISB
IF @WRK_TOTAL > @TOTAL_DISB
SELECT '0' as PASSED
ELSE
SELECT '1' as PASSED
END I dont think its duplicate of any question so Intially I had just posted small portion of my code. Since some of so called expert did not like it so here is my complete code that needs to be translated in oracle. Which I have done but i had hard time understanding the case
What does select anydeclaredvariable = column_name from anytable does?
Upvotes: 0
Views: 831
Reputation: 6174
Your question asks
What does
DECLARE variable = column_name
do?
The statement: DECLARE @Variable int = 5
will create the variable named @Variable
and initialize its contents to the value 5
.
If your question instead is: "What does SELECT @inputData = column_name FROM table
do?", then the answer is that it assigns the value returned for column_name
to the variable @inputData
.
I hope this answers your question.
Upvotes: 2
Reputation: 22811
Important difference between MS Sql and Oracle is that in MS
SELECT @inputData = column_name FROM table;
runs OK even with no predicates i.e. with multirows result set, returning the value of column_name
from an arbitrary row. In Oracle
SELECT column_name INTO input_data FROM my_table;
will fail if the result set contains more then one row. You shouldn't just translate syntax thoughtlessly.
Upvotes: 2
Reputation: 39527
variable = column_name
assigns column's value to your variable.
Something like this should work in Oracle:
declare
input_data my_table.my_column%type;
begin
select my_column into input_data from my_table where /* some predicate(s) */;
end;
/
Upvotes: 2