簡體   English   中英

將SQL Server / T-SQL查詢轉換為Oracle PL / SQL

[英]Convert SQL Server / T-SQL query to Oracle PL/SQL

我有一個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 tableselect DECLARE variable = column_name from any table什么?

編輯

我已經嘗試過自己進行研究,但是找不到適當的解釋。 這里所謂的專家SOme不喜歡這里的一小段代碼,這是我試圖為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中進行翻譯。 我已經做了,但是我很難理解此案

從anytable中選擇anydeclaredvariable = column_name是什么?

變量= column_name

將列的值分配給變量。

像這樣的事情在Oracle中應該起作用:

declare
  input_data my_table.my_column%type;
begin
  select my_column into input_data from my_table where /* some predicate(s) */;
end;
/

您的問題問

DECLARE variable = column_name是什么?

語句: DECLARE @Variable int = 5將創建名為@Variable的變量,並將其內容初始化為值5

如果您的問題是:“ SELECT @inputData = column_name FROM table什么作用?”,那么答案是它將為column_name返回的值分配給變量@inputData

我希望這回答了你的問題。

MS Sql和Oracle之間的重要區別在於MS中的區別

SELECT @inputData = column_name FROM table;

即使沒有謂詞也可以正常運行,即具有多行結果集,並從任意行返回column_name的值。 在甲骨文

SELECT column_name INTO input_data FROM my_table;

如果結果集包含多於一行,將失敗。 您不應該僅僅考慮語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM