Как я могу сделать динамический PL / SQL? - PullRequest
0 голосов
/ 02 апреля 2019

Я хотел бы сделать динамический pl / sql, используя переменные типа в значениях параметров.

значение параметра> type = {'name + place', 'resno', 'hpno', 'telno'};

например, если я получил значения параметров ('resno', 'hpno') Требуются два комбинированных запроса (всего 2 объединения), поэтому это означает, что количество запросов зависит от значения параметра.

select * from (
--repeatation
select * from
(select a.custnm
     , 'name + place' as vtype
     , a.custnm || '-' || c.pjtcd || '-' || c.dong || '-' || c.ho as con
     , count(a.custid) as nodup 
from   custtable a
     , thng c 
where a.custid = c.custid(+)
group by a.custnm, c.pjtcd, c.dong, c.ho
having count(a.custid) > 1) x
--/repeatation
union all
--repeatation
select * from
(select a.custnm
     , 'resno' as vtype
     , a.resno as condup
     , count(a.custid) as nodup 
from   custtable a
group by a.custnm, a.resno
having count(a.custid) > 1) x2
--repeatation
union all
--repeatation
select * from
(select a.custnm
     , 'hpno' as vtype
     , a.hpno as condup
     , count(a.custid) as nodup 
from   custtable a
group by a.custnm, a.hpno
having count(a.custid) > 1) x3
--repeatation
union all
--repeatation
select * from
(select a.custnm
     , 'telno' as vtype
     , a.telno as condup
     , count(a.custid) as nodup 
from   custtable a
group by a.custnm, a.telno
having count(a.custid) > 1) x4
--repeatation
) 
order by decode(vtype, 'name +`enter code here` place', 1 ,'resno', 2 ,'hpno', 3,  'telno', 4), nodup desc

PLZ, дайте мне знать, как сделать plsql со значением параметра

1 Ответ

1 голос
/ 02 апреля 2019

Это заявление SELECT. Как это написано сейчас, это SQL, а не PL / SQL, и я предлагаю оставить это так . Вместо написания ужасного PL / SQL (динамический SQL обычно не подходит), почему бы вам не создать представление , основанное на этом утверждении?

create or replace view v_my_view as
select * from (
--repeatation
select * from
(select a.custnm
     , 'name + place' as vtype
<snip>

Как только вы это сделаете, используйте его где угодно, включая PL / SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...