関数に問題があります。月の日付、日の名前、およびその月の平日の数を含むテーブルを取得する必要があります。私はすでにここでいくつかの助けを見つけてそれを私のニーズに適合させました、しかし私は関数を実行/コンパイルすることができませんこれは私がこれまでに持っているものです:
create or replace TYPE DATE_ROW AS OBJECT
(
MyDate DATE,
Dayname VARCHAR2(12),
Amount Integer
)
create or replace TYPE DATE_TABLE as table of DATE_ROW
create or replace FUNCTION myfinaldays (mydate date)
RETURN DATE_TABLE
PIPELINED
IS
V_MYDATE DATE;
V_DAYNAME VARCHAR2(12);
V_AMOUNT NUMBER;
BEGIN
with this_month as (
select trunc(to_date('mydate'), 'mm')+level-1 dy
from dual
connect by level < (trunc(add_months(to_date('mydate'),1), 'mm')- trunc(to_date('mydate'), 'mm'))+1
)
FOR i IN 0 .. (select count(*) from this_month) LOOP
select (dy) Daydate,
to_char(dy, 'day'), Dayname,
( select count(*)
from this_month
where to_char(dy, 'dy') not in ('sat', 'sun')
) Amount
from this_month
where to_char(dy, 'dy') not in ('sat', 'sun')
and EXTRACT(day from to_date(dy)) = i;
pipe row (date_row(v_mydate,v_dayname, v_amount));
END LOOP;
RETURN;
END;
その場合、関数呼び出しは次のようになります。
select * from date_table(cast(myfinaldays('01.02.12')));
パラメータとして指定できる日付は1つだけです。
これがゆっくりと私を怒らせているので、誰かがここで私を助けてくれることを願っています。任意のアイデア、例、または考えをいただければ幸いです。
アップデート:
OK、これがmybeのアップデートで、私の問題に対するさらに役立つ情報がいくつかあります。
これは機能しており、私の目的はこれを関数に入れて、1つのパラメーターで呼び出すことができるようにすることです。
with this_month as (
select trunc(to_date('01.02.12'), 'mm')+level-1 dy
from dual
connect by level < (trunc(add_months(to_date('01.02.12'),1), 'mm')- trunc(to_date('01.02.12'), 'mm'))+1
)
select (dy) mydate, (select count(*) from this_month) Days_in_month
, to_char(dy, 'day') Dayname
, ( select count(*) from this_month where to_char(dy, 'dy') not in ('sat', 'sun') ) Amount
from this_month
where to_char(dy, 'dy') not in ('sat', 'sun') ;
追加したループの場合:'およびEXTRACT(day from to_date(dy))=i'最後に。
最終的に必要なものがわかるように、日付を追加しました。代わりにmydateを記述し、開発者で実行した後にパラメーターとして01.02.12と入力しても、引き続き機能します。
コンパイル時に発生するエラー:-Error(10,1):PL / SQL:SQLステートメントは無視されます
- Error(15,5): PL/SQL: ORA-00928: Keyword SELECT missing
- Error(22,8): PLS-00113: END-Definer 'LOOP' must complete 'myfinaldays' in row 1, comlumn 10
- Error(23,4): PLS-00103: Found the symbol "RETURN"
私のOracleは英語を実行していないため、エラーは翻訳されているので、正しく推測できたと思います。