Search Postgresql Archives

Re: Syntax error for Function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/20/2016 08:00 AM, Sachin Srivastava wrote:
Dear Adiran,

Thanks for your help !!

First I want to say it's not giving the error for
this ""languagetype@xxxxxxxxxxxxxxxxxxxxx
<mailto:languagetype@xxxxxxxxxxxxxxxxxxxxx>", so there is any need to do
the change as suggested by you.

You are not seeing a syntax error, but I am pretty sure you will see a run error as from what I gather languagetype@repos.. is an Oracle construct:

http://stackoverflow.com/questions/296263/what-is-the-meaning-of-symbol-in-oracle-sql

Pretty sure Postgres is going to fail on:

cur1 CURSOR FOR SELECT distinct(language_id) from "languagetype@xxxxxxxxxxxxxxxxxxxxx "

when it tries to execute the query.


Second you suggested " exit with cur1; " - *You are right after putting
the semi column my code is working fine.*

There is also one query I have changed this line
"*langCursor cur1%rowtype;" as below:*
*
*
**
langCursor RECORD; --cur1%rowtype;

No ; at end of comment:

http://www.postgresql.org/docs/9.4/static/plpgsql-structure.html


Please read my code once again and suggest I did correct these change or
not because this is suggested by one of my friend and first I am getting
the error for this line.

I am the new one for plsql code that's why I am taking the expert advice.

That is why I suggested taking a look at the plpgsql section of the manual. A quick run through will answer most of your questions.



Thanks
SS

On Wed, Jan 20, 2016 at 8:30 PM, Adrian Klaver
<adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>> wrote:

    On 01/20/2016 06:32 AM, Sachin Srivastava wrote:

        Dear Thom,

        Please find the complete code as below and suggest now.


    I would suggest spending some time here:

    http://www.postgresql.org/docs/9.4/interactive/plpgsql.html

    in particular:

    http://www.postgresql.org/docs/9.4/interactive/plpgsql-control-structures.html#PLPGSQL-CONTROL-STRUCTURES-LOOPS

    and here:

    http://www.postgresql.org/docs/9.4/interactive/plpgsql-porting.html

    Comments in-line


        ----------------------

        -- Function: gen_budget_for_next_year(bigint, bigint, bigint)
        -- DROP FUNCTION gen_budget_for_next_year(bigint, bigint, bigint);
        CREATE OR REPLACE FUNCTION gen_budget_for_next_year(
              subid bigint,
              compid bigint,
              formonth bigint)
            RETURNS void AS
        $BODY$
        DECLARE
        --Version:
        --2015.01 PM T15422-10- Generate budget period for coming years.
        05/01/2015
        cur1 CURSOR FOR SELECT distinct(language_id) from
        "languagetype@xxxxxxxxxxxxxxxxxxxxx
        <mailto:languagetype@xxxxxxxxxxxxxxxxxxxxx>


    Have you tried the above. I know quoting it got you pass the syntax
    error, but I am pretty sure it not going to do what it did in Oracle.

        <mailto:languagetype@xxxxxxxxxxxxxxxxxxxxx
        <mailto:languagetype@xxxxxxxxxxxxxxxxxxxxx>>";
        sFound bigint := 0;
        recCount bigint :=0;
        period varchar(100);
        firstDate varchar(100);
        lastDate varchar(100);
        curMonth varchar(100);
        langCursor RECORD; --cur1%rowtype;

        BEGIN
            loop
            open cur1;
            IF NOT FOUND THEN EXIT; END IF; -- apply on recCount >=
        forMonth;
                  select to_char(TO_DATE(LOCALTIMESTAMP) + recCount*'1
        month'::interval,'YYYYMM') into period  ;
                  select to_date(period||'01','YYYYMMDD') into firstDate  ;
                  select TO_DATE(LOCALTIMESTAMP) + recCount*'1
        month'::interval
        into lastDate  ;
                  select to_char(TO_DATE(LOCALTIMESTAMP) + recCount*'1
        month'::interval, 'YYYY MM MONTH') into curMonth ;
                  recCount :=recCount+1;
            loop
            fetch cur1 into langCursor;
            exit when cur1


     From loop link above, this needs to be

    exit when cur1;

                      select Count(0) into sFound  from budget_period t
        where
        t.subscriber_id =subID
                      and t.period_number = period and
        t.language_id=langCursor.Language_Id;
                      if(sFound = 0)then
                          insert into budget_period (subscriber_id,
        company_id,
        period_number, period_name,
                          period_length_code, first_day,
        last_day,creation_date,
        creation_user, update_date, update_user, language_id)
                          values(subID, compID, period,  curMonth,  'MONTH',
                          firstDate, lastDate, LOCALTIMESTAMP,
        'Admin',LOCALTIMESTAMP, 'Admin', langCursor.Language_Id);
                      end if;
            end loop;
            close cur1;
            end loop;

        commit;
        END;
        $BODY$
            LANGUAGE plpgsql VOLATILE SECURITY DEFINER
            COST 100;
        ALTER FUNCTION gen_budget_for_next_year(bigint, bigint, bigint)
            OWNER TO postgres;

        --------------------------------

        On Wed, Jan 20, 2016 at 6:05 PM, Thom Brown <thom@xxxxxxxxx
        <mailto:thom@xxxxxxxxx>
        <mailto:thom@xxxxxxxxx <mailto:thom@xxxxxxxxx>>> wrote:

             On 20 January 2016 at 12:15, Sachin Srivastava
             <ssr.teleatlas@xxxxxxxxx <mailto:ssr.teleatlas@xxxxxxxxx>
        <mailto:ssr.teleatlas@xxxxxxxxx
        <mailto:ssr.teleatlas@xxxxxxxxx>>> wrote:
              > I am unable to find out the syntax error in below code,
        please
             suggest?
              >
              >
              >
              > ERROR:  syntax error at or near "select"
              > LINE 44:             select Count(0) into sFound  from
             budget_period ...
              >                      ^
              > ********** Error **********
              > ERROR: syntax error at or near "select"
              > SQL state: 42601
              > Character: 1190
              >
              > Code as below:
              > -------------------------
              >
              > select Count(0) into sFound  from budget_period t where
             t.subscriber_id
              > =subID
              >             and t.period_number = period and
              > t.language_id=langCursor.Language_Id;
              >             if(sFound = 0)then
              >                 insert into budget_period
        (subscriber_id, company_id,
              > period_number, period_name,
              >                 period_length_code, first_day,
             last_day,creation_date,
              > creation_user, update_date, update_user, language_id)
              >                 values(subID, compID, period,
        curMonth,  'MONTH',
              >                 firstDate, lastDate, LOCALTIMESTAMP,
             'Admin',LOCALTIMESTAMP,
              > 'Admin', langCursor.Language_Id);
              >             end if;
              >
              > ------------------------

             Well, it says that the problem occurs on line 44, so what's
        on the
             previous lines it's receiving?  Are you sending an
        unterminated query
             prior to that?

             Thom




    --
    Adrian Klaver
    adrian.klaver@xxxxxxxxxxx <mailto:adrian.klaver@xxxxxxxxxxx>




--
Adrian Klaver
adrian.klaver@xxxxxxxxxxx


--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux