Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

t-sql to plsql Pomoc pri prevodu upita

[es] :: Oracle :: t-sql to plsql Pomoc pri prevodu upita

[ Pregleda: 2043 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 16:58 - pre 87 meseci
Dakle prvi put se susrecem sa oraclom i okolinom tako imam velikih poteskoca, ako moze neko da mi pomogne da "prevedem" ovaj kod bio bi stvarno zahvalan, skoro ceo dan se mucim te ono te ovo al mi neide. Hvala vam


Code:
DECLARE @strng varchar(max) = 'bzz';
DECLARE @strngOut varchar(max) = '';
DECLARE @incremented bit = 1;
SET @strng = REVERSE(@strng);
 
SELECT @strngOut = @strngOut + CHAR(CASE WHEN n.Number + @incremented = 26 THEN 0 ELSE n.Number 
+ @incremented END + 97), @incremented = CASE WHEN n.Number + @incremented = 26 THEN 1 ELSE 0 END
FROM (
       SELECT (CAST(ASCII(substring(@strng, v.number+1, 1)) AS int) - 97) AS Number
       FROM master..spt_values v
       WHERE v.type = 'P' AND v.number < len(@strng)
) n;
 
IF (@incremented = 1)
BEGIN
       SET @strngOut = @strngOut + 'a';
END
 
SELECT REVERSE(@strngOut)

Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 18:16 - pre 87 meseci
Nekako sam stigo do prikraja al ne znam kako resiti ovo sa master samo taj deo je ostao pls


Code:
PROCEDURE GenerateNewPieceID (p_PieceID IN PIECE.PIECE_ID%TYPE)
IS
   v_Strng       VARCHAR (100) := 'bzz';
   v_strngOut    VARCHAR (100);
   v_incremented   NUMBER := 1;
   v_Test        VARCHAR(100);
BEGIN

   SELECT REVERSE (v_Strng)
   INTO v_Strng
   FROM DUAL;

   SELECT   v_strngOut
          + CHR (CASE WHEN n.Number1 + v_incremented = 26 THEN 0
                      ELSE n.Number1 + v_incremented END + 97),
                 CASE WHEN n.Number1 + v_incremented = 26 THEN 1 
                      ELSE 0 END
     INTO v_strngOut, v_incremented
     FROM (SELECT (CAST (ASCII (SUBSTR (v_strng, v.number1 + 1, 1)) AS NUMBER (10))- 97) AS Number1
           FROM master.spt_values v --ne znam u oraclu sto koristiti :S
           WHERE v.TYPE = 'P' AND v.Number1 < LENGTH (RTRIM (v_strng))) n;

   IF (v_incremented = 1)
   THEN
      v_strngOut := v_strngOut || 'a';
   END IF;

   SELECT REVERSE (v_strngOut) 
   INTO v_Test
   FROM DUAL;
   
   
END;

Kude tumbe i tri bandere
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 19:05 - pre 87 meseci
A da objasniš šta želiš da dobiješ?

Oracle ima VARCHAR2 tip.
Oracle ima funkcije i procedure. Ako je funkcija, onda mora da se tako deklariše i da ima return type i return naredbu. Ako je procedura, onda je suludo da radi samo select, a da nema ni jedan OUT parametar jer se onda apsolutno ništa ne desi...
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 20:34 - pre 87 meseci
Kao sto sam rekoa poceo sam samo da pisem proceduru cisto da vidim dokle mogu da doguram t.e koliko mogu da "prevedem" zato nema out, inace da procedura je i out bi bio v_Test. A inace sto bi trebala procedura da radi sam stavio kao hyper link u prvom postu posto smo pisali oko toga da ne pisem opet. Hvala

Procedura radi generisanje slova (AlphaNumeric Sequence) primer

A AA AAA
B AB ABA
C AC ACA
. .. ...
. .. ...
. .. ...
Z ZZ ZZZ

Kude tumbe i tri bandere
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 20:57 - pre 87 meseci
Code:

create or replace function next_char_seq( currid in varchar2) return varchar2 is
  carry integer := 1;
  res varchar2(100);
  currnum number;
begin
  for i in reverse 1..length(currid) loop
    currnum := ascii(upper(substr(currid,i,1))) - ascii('A') + carry;
    carry := currnum/26;
    res := chr(mod(currnum, 26)+ascii('A')) || res;
  end loop;
  
  if carry = 1 then
    res := 'A' || res;
  end if;
  
  return res;
end;
/
select next_char_seq('a'), next_char_seq('z'), next_char_seq('aaz') from dual;


Funkcija očekuje string koji se sastoji od slova a-z (bez obzira da li su mala ili velika), a vraća string koji je za "jedan" veći od ulaznog stringa (uvek vraća UPPERCASE string).
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 21:05 - pre 87 meseci
Hvala najlepse. Pozdrav
Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita22.02.2017. u 22:09 - pre 87 meseci
Ima neki bag ne vidim vise sto je ispusteno ali probaj sa MM t.e AMM i tako dalje sve sto je MN+ pretvara pogresno.

Code:

Naprimer ovo 
FROM master..spt_values v
WHERE v.type = 'P' AND v.number < len(@strng)
u mssql bi bilo lista od 2048 broja t.e 0 do 2047


Neki nacin da implemetiram to u oraclu bi bilo izvrsno nego da koristim loop i sl, moje misljenje i svakako skratilo bi mi muke :D
Kude tumbe i tri bandere
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita23.02.2017. u 08:07 - pre 87 meseci
U pravu si, treba:

carry := trunc(currnum/26);

Mislio sam da će mi zbog integer tipa automatski raditi celobrojno deljenje, ali Oracle ipak zaokružuje. Evo celog koda, dodata i obrada grešaka.

Code:
create or replace function next_char_seq( currid in varchar2) return varchar2 is
  carry integer := 1;
  res varchar2(100);
  currnum number;
  ch varchar2(1);
  invalid_character exception;
begin
  for i in reverse 1..length(currid) loop
    ch := upper(substr(currid,i,1));
    if ch < 'A' or ch > 'Z' then
      raise invalid_character;
    end if;
    currnum := ascii(ch) - ascii('A') + carry;
    carry := trunc(currnum/26);
    res := chr(mod(currnum, 26)+ascii('A')) || res;
  end loop;
  
  if carry = 1 then
    res := 'A' || res;
  end if;
  
  return res;
end;
/

select next_char_seq('mm'), next_char_seq('z'), next_char_seq('aaz') from dual;
select next_char_seq('1') from dual;
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.177.*



+3 Profil

icon Re: t-sql to plsql Pomoc pri prevodu upita23.02.2017. u 08:51 - pre 87 meseci
Hvala jos jednom, mnogo mi znaci ova pomos :)
Kude tumbe i tri bandere
 
Odgovor na temu

[es] :: Oracle :: t-sql to plsql Pomoc pri prevodu upita

[ Pregleda: 2043 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.