简体   繁体   English

T-SQL 到 Oracle 查询转换

[英]T-SQL to Oracle query conversion

I have been trying to convert some SQL Server queries that I wrote over into Oracle.我一直在尝试将我写的一些 SQL Server 查询转换为 Oracle。 I have my original SQL queries up on pastebin here: https://pastebin.com/Ru19FCzG but I am working through it one block at a time.我在 pastebin 上有我的原始 SQL 查询: https : //pastebin.com/Ru19FCzG但我一次一个块地完成它。

Here is the block I am working on currently(which is the most important one) Original Query:这是我目前正在处理的块(这是最重要的块)原始查询:

declare @name varchar(max) = 'SPRING 1 2017 RTP';
declare @term varchar(30), @session varchar(1), @loc varchar(2), @id nvarchar(255);
set @term = '17SP1';
set @session='1';
set @loc = 'RT';
set @id = CASE WHEN @session = '2'
            then ('%-%-' + @loc + '[5-9]%-' + @term)
            else ('%-%-' + @loc + '[0-4]%-'+ @term)
        END;

select dr.crsmain_batch_uid [course_id], (us.firstname+' '+us.lastname)[instructor],
 q.qtext_body[question], qr.answer_text[answer], ac.points[points]
into #survey_results
from clp_sv_question_response qr
    join deployment_response dr on qr.deployment_response_pk1=dr.pk1
    join deployment d on dr.deployment_pk1=d.pk1
    join clp_sv_answer_choice ac on qr.clp_sv_answer_choice_pk1=ac.pk1
    join clp_sv_subquestion sq on ac.clp_sv_subquestion_pk1=sq.pk1
    join clp_sv_question q on sq.clp_sv_question_pk1=q.pk1
    left join (
        select c.batch_uid, u.firstname, u.lastname from course_users cu
            join users u on u.pk1=cu.users_pk1
            join course_main c on cu.crsmain_pk1=c.pk1
            where (c.course_id like @id)
             and cu.role='P' and u.user_id not like '%_admin') us on dr.crsmain_batch_uid=us.batch_uid
where d.name=@name
order by dr.crsmain_batch_uid, instructor,
 q.qtext_body, qr.answer_text, ac.points;

Here is the Modified query that I have that isn't working yet.这是我尚未使用的修改后的查询。

Oracle:甲骨文:

define name = 'SPRING 1 2017 RTP';
define term = '17SP1';
define session = '1';
define loc = 'RT';
define id = IF &session = '1'
            then (course_id, '[a-z]{3,}|[0-9]{3}|'loc'[0-4]{1}[0-9]{1}'term,'i') 
            else (course_id, '[a-z]{3,}|[0-9]{3}|'loc'[5-9]{1}[0-9]{1}'term,'i') 
        END IF;

create table survey_results as
select dr.crsmain_batch_uid as "course_id", (us.firstname+' '+us.lastname) as "instructor", 
 q.qtext_body as "question", qr.answer_text as "answer", ac.points as "points"
from clp_sv_question_response as qr
    inner join deployment_response as dr on qr.deployment_response_pk1=dr.pk1
    inner join deployment as d on dr.deployment_pk1=d.pk1
    inner join clp_sv_answer_choice as ac on qr.clp_sv_answer_choice_pk1=ac.pk1
    inner join clp_sv_subquestion as sq on ac.clp_sv_subquestion_pk1=sq.pk1
    inner join clp_sv_question as q on sq.clp_sv_question_pk1=q.pk1
    left join (
        select c.batch_uid, u.firstname, u.lastname from course_users as cu
            join users as u on u.pk1=cu.users_pk1
            join course_main as c on cu.crsmain_pk1=c.pk1
            where (c.course_id regexp_like &id)
             and cu.role='P' and u.user_id not like '%_admin') as "us" on dr.crsmain_batch_uid=us.batch_uid
where d.name=&name
order by dr.crsmain_batch_uid, instructor,
 q.qtext_body, qr.answer_text, ac.points;

Any help at all would be appreciated.任何帮助都将不胜感激。

Try using a PL/SQL Block尝试使用 PL/SQL 块

Declare
name varchar2(20);
term varchar2(10);
session varchar2(1);
loc varchar2(2);
id varchar2(100)

Begin

name = 'SPRING 1 2017 RTP';
 term = '17SP1';
 session = '1';
 loc = 'RT';
 SELECT DECODE(session , '1', 'Then value', 'Else Value')
   INTO ID
 FROm DUAL;

YOUR REST OF THE QUERY剩下的问题

END:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM