Funkcja PLSQL ma zwrócić DATE.

Funkcja PLSQL ma zwrócić DATE.
PE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Mam takie zagadnienie, że chciałbym w funkcji PLSQL zwrócić datę (DATE) tylko żeby wyświetlił mi się pełny miesiąc np. 20 listopada 2014.
Może jakaś podpowiedź ?

Pozdrawiam.
P.

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

Tak tylko rzuce, może na coś naprowadzi ten link http://www.techonthenet.com/oracle/functions/to_date.php

EroSanin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 311
0

Taka podpowiedź:

Kopiuj
 
SET serveroutput ON

declare

info date := sysdate;

begin

dbms_output.put_line(to_char(info, 'DD MONTH YYYY'));

end;

Teraz musisz z tego zrobić funkcje. W moim wypadku data jest konwertowana z DATE do CHAR.

PE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

dzięki za podpowiedzi ale może doprecyzuje o co dokładnie chodzi.
A więc ma to być tego typu funkcja:

create function moja_data(v_tekst in char)
return date
is
v_data date;
begin
-- tutaj jakiś kodzik
return v_data;
end;
/

W wyniku ma się pojawić np. 20 listopada 2014.

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

A, to o tym piszą chyba tutaj http://www.oracle.com/technetwork/issue-archive/2012/12-jan/o12plsql-1408561.html ... Od "Use TO_CHAR to display the full names of both the day and the month in the date: .... ". Chyba, że dalej nie rozumiem :)

EroSanin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 311
0

Odpowiedź już masz w tym temacie. Poczytaj linki:)

PE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Na szybko poradziłem sobie z DBMS_OUTPUT.PUT_LINE.

create or replace function pesel_data(pesel in char)
return date
is
v_data date;
v_pomoc date;
begin
v_data:= null;
v_pomoc:=substr(pesel,1,6);
DBMS_OUTPUT.PUT_LINE(to_char(v_pomoc,'dd month yyyy'));
return v_data;
end;
/
show errors

ale wydaje mi się to mało eleganckie. Wolał bym to zwrócić w return.
Jeszcze pomyślę albo może ktoś jeszcze coś podpowie. :)

plug
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krk
0

Witam,

zrobiłbym to w ten sposób :

Kopiuj
create or replace function pesel_data(pesel in varchar2)
return varchar2
is
v1 varchar2(10);
v2 varchar2(20);
begin
v1:=substr(pesel,1,6);
V2:=to_char(to_date('19'||v1,'yymmdd'),'dd month yyyy');
return v2;
end;
/

Wywołanie funkcji:

Kopiuj
select pesel_data('86043056970') from dual

Jest jedna wada mojego rozwiązania , prawidłowo pokazuje przekonwertowany pesel dla ludzi urodzonych w XX wieku :-P.
Jeżeli chcesz prawidłowe dane dla całej populacji to pokombinuj z funkcjami to_date i to_char, możesz także obsłużyć to funkcją CASE. Warto zauważyć ze ww rozwiązanie działa dla najliczniejszej grupy ludzi na świecie :D.

Pozdrawiam

PE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 45
0

Dzięki @plug, problem całej populacji mam rozwiązany :)
Chodzi o to, że funkcja ma zwrócić DATE .

plug
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Krk
0

Wydaje mi się, że wartości typu DATE, Oracle wypluwa tylko w formacie 'YYYY/MM/DD'.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.