【发布时间】:2017-06-03 05:23:15
【问题描述】:
我有一个 SQL Server T-SQL 查询,需要将其转换为 Oracle PL-SQL。
我的 SQL Server 查询是:
DECLARE @inputData
BEGIN
SELECT @inputData = column_name
FROM table;
END
select DECLARE variable = column_name from any table 是做什么的?
编辑
我已尝试自行研究此问题,但找不到合适的解释。 这里的一些所谓的专家不喜欢这里的一小段代码,这是我试图为 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
结束 我不认为它与任何问题重复,所以最初我刚刚发布了我的代码的一小部分。由于一些所谓的专家不喜欢它,所以这是我需要在 oracle 中翻译的完整代码。我做过,但我很难理解这个案子
做什么 select anydeclaredvariable = column_name from anytable 呢?
【问题讨论】:
-
当您搜索“SQL Server 变量”时,答案就在谷歌的第一个链接中。听起来你没有做太多研究。
-
这里有答案:link
-
在堆栈溢出时收集积分并不会让您成为专家,我希望投票可以满足您的自我,但对其他人没有帮助。而且它不是上述链接的重复,它已经被其他人在这里回答了
标签: sql sql-server tsql plsql