Alpha Software Mobile Development Tools:   Alpha Anywhere    |   Alpha TransForm subscribe to our YouTube Channel  Follow Us on LinkedIn  Follow Us on Twitter  Follow Us on Facebook

Announcement

Collapse

The Alpha Software Forum Participation Guidelines

The Alpha Software Forum is a free forum created for Alpha Software Developer Community to ask for help, exchange ideas, and share solutions. Alpha Software strives to create an environment where all members of the community can feel safe to participate. In order to ensure the Alpha Software Forum is a place where all feel welcome, forum participants are expected to behave as follows:
  • Be professional in your conduct
  • Be kind to others
  • Be constructive when giving feedback
  • Be open to new ideas and suggestions
  • Stay on topic


Be sure all comments and threads you post are respectful. Posts that contain any of the following content will be considered a violation of your agreement as a member of the Alpha Software Forum Community and will be moderated:
  • Spam.
  • Vulgar language.
  • Quotes from private conversations without permission, including pricing and other sales related discussions.
  • Personal attacks, insults, or subtle put-downs.
  • Harassment, bullying, threatening, mocking, shaming, or deriding anyone.
  • Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language.
  • Sexually explicit or violent material, links, or language.
  • Pirated, hacked, or copyright-infringing material.
  • Encouraging of others to engage in the above behaviors.


If a thread or post is found to contain any of the content outlined above, a moderator may choose to take one of the following actions:
  • Remove the Post or Thread - the content is removed from the forum.
  • Place the User in Moderation - all posts and new threads must be approved by a moderator before they are posted.
  • Temporarily Ban the User - user is banned from forum for a period of time.
  • Permanently Ban the User - user is permanently banned from the forum.


Moderators may also rename posts and threads if they are too generic or do not property reflect the content.

Moderators may move threads if they have been posted in the incorrect forum.

Threads/Posts questioning specific moderator decisions or actions (such as "why was a user banned?") are not allowed and will be removed.

The owners of Alpha Software Corporation (Forum Owner) reserve the right to remove, edit, move, or close any thread for any reason; or ban any forum member without notice, reason, or explanation.

Community members are encouraged to click the "Report Post" icon in the lower left of a given post if they feel the post is in violation of the rules. This will alert the Moderators to take a look.

Alpha Software Corporation may amend the guidelines from time to time and may also vary the procedures it sets out where appropriate in a particular case. Your agreement to comply with the guidelines will be deemed agreement to any changes to it.



Bonus TIPS for Successful Posting

Try a Search First
It is highly recommended that a Search be done on your topic before posting, as many questions have been answered in prior posts. As with any search engine, the shorter the search term, the more "hits" will be returned, but the more specific the search term is, the greater the relevance of those "hits". Searching for "table" might well return every message on the board while "tablesum" would greatly restrict the number of messages returned.

When you do post
First, make sure you are posting your question in the correct forum. For example, if you post an issue regarding Desktop applications on the Mobile & Browser Applications board , not only will your question not be seen by the appropriate audience, it may also be removed or relocated.

The more detail you provide about your problem or question, the more likely someone is to understand your request and be able to help. A sample database with a minimum of records (and its support files, zipped together) will make it much easier to diagnose issues with your application. Screen shots of error messages are especially helpful.

When explaining how to reproduce your problem, please be as detailed as possible. Describe every step, click-by-click and keypress-by-keypress. Otherwise when others try to duplicate your problem, they may do something slightly different and end up with different results.

A note about attachments
You may only attach one file to each message. Attachment file size is limited to 2MB. If you need to include several files, you may do so by zipping them into a single archive.

If you forgot to attach your files to your post, please do NOT create a new thread. Instead, reply to your original message and attach the file there.

When attaching screen shots, it is best to attach an image file (.BMP, .JPG, .GIF, .PNG, etc.) or a zip file of several images, as opposed to a Word document containing the screen shots. Because Word documents are prone to viruses, many message board users will not open your Word file, therefore limiting their ability to help you.

Similarly, if you are uploading a zipped archive, you should simply create a .ZIP file and not a self-extracting .EXE as many users will not run your EXE file.
See more
See less

Oracle stored functions

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Oracle stored functions

    I'm evaluating AlphaFiveV10 with the 30 day trial.
    How to use this small Oracle 10g "stored function" with AlphaDAO scripting?

    create or replace FUNCTION COUNT_EMP
    (
    p_from IN NUMBER,
    p_to IN NUMBER
    )
    RETURN number AS
    l_count number;
    BEGIN
    select count(*)
    into l_count
    from emp
    where empno between p_from and p_to;
    return (l_count);
    END COUNT_EMP;

    Tried with:
    "Execute Select Query on a SQL database"
    Connection string "MyOracleConnect" (tested with succeed)
    SQL Statement type "Stored Procedure"
    Stored Procedure Name "COUNT_EMP"
    Arguments: p_from,p_to

    Button "Run" says:
    "ORA-00900 invalid SQL statement"

    "View XbBasic" output:

    DIM cn as SQL::Connection
    dim flagResult as l
    flagResult = cn.open("::Name::MyOracleConnect")
    if flagResult = .f. then
    ui_msg_box("Error","Could not connect to database. Error reported was: " + crlf() + cn.CallResult.text)
    end
    end if
    cn.PortableSQLEnabled = .f.
    dim sqlStatement as c
    sqlStatement = <<%sql%
    COUNT_EMP
    %sql%
    'Execute the Query
    flagResult = cn.Execute(sqlStatement)
    if flagResult = .f. then
    ui_msg_box("Error",cn.CallResult.text)
    cn.close()
    end
    end if
    dim rs as sql::resultset
    rs = cn.ResultSet
    sql_resultset_preview(rs,1000,"Preview Query Results",cn)
    'Now, close the connection
    cn.close()

    Any solution?

    Thanks

    #2
    Re: Oracle stored functions

    Hi Harry,

    Welcome to Alpha.

    I'm not an Oracle expert but my question back to you is, did you write the Stored Function or did you let Alpha write it for you?
    Regards
    Keith Hubert
    Alpha Guild Member
    London.
    KHDB Management Systems
    Skype = keith.hubert


    For your day-to-day Needs, you Need an Alpha Database!

    Comment


      #3
      Re: Oracle stored functions

      See this thread on running stored procedures.
      There can be only one.

      Comment


        #4
        Re: Oracle stored functions

        Thanks,

        changed coding to:

        p_from=1
        p_to=100
        sqlStatement = "COUNT_EMP" + "'"+p_from+"','"+p_to+"'"
        flagResult = cn.Execute(sqlStatement)

        Same error
        "ORA-00900 invalid SQL statement"

        Please see above, COUNT_EMP is a Oracle STORED FUNCTION with a return value!

        Comment


          #5
          Re: Oracle stored functions

          You have not defined your return value

          Comment


            #6
            Re: Oracle stored functions

            What about an extra space after the function name and before the first param?

            Comment


              #7
              Re: Oracle stored functions

              I think you should have


              Code:
              DIM cn as SQL::Connection
              dim flagResult as l
              flagResult = cn.open("::Name::MyOracleConnect")
              if flagResult = .f. then
              ui_msg_box("Error","Could not connect to database. Error reported was: " + crlf() + cn.CallResult.text)
              end
              end if
              cn.PortableSQLEnabled = .f.
              dim sqlStatement as c
              sqlStatement = <<%sql%
              SELECT COUNT_EMP(:from, :to) AS employeeCount
              %sql%
              ' these employee numbers are just examples
              p_from="1"
              p_to="100"  
              
              dim args as sql::arguments
              args.set("from",p_from)
              args.set("to",p_to)
              'Execute the Query
              flagResult = cn.Execute(sqlStatement,args)
              if flagResult = .f. then
              ui_msg_box("Error",cn.CallResult.text)
              cn.close()
              end
              end if
              dim rs as sql::resultset
              rs = cn.ResultSet
              employeeCount=rs.data("employeeCount")
              'Now, close the connection
              cn.close()

              Comment


                #8
                Re: Oracle stored functions

                Thanks Brent,
                - the first coding was made automatically by AlphaFive (not me)
                - is there a problem with extra spaces ?

                Comment


                  #9
                  Re: Oracle stored functions

                  Many thanks Peter,
                  tried your code and get the error:
                  "ORA-00923: FROM keyword not found where expected"

                  with Oracle there is no:
                  "SELECT COUNT_EMP(1, 100) AS employeeCount"

                  changed to:
                  "SELECT COUNT_EMP(1, 100) employeeCount from dual"
                  but now there is no answer/message after "Run"

                  Want to change the code by "Design" and the error is now:
                  Script:IU_DLG_BOX:@=a5_script_editor_internal line:700
                  Named modeless dialog not found
                  ???
                  After restart of Alpha the error disappeared.

                  Dissapointing, i have only a few days left to evaluate AlphaFive V10 and couldn't get a small Oracle "stored function" running.
                  Don't forget i'm new to (codeless) Alpha and XBasic.

                  We use Oracle Forms 6i Client/Server (> 1000 Forms/Reports) and have a lot of PL/SQL coding in our Oracle 10g Database.
                  Without a well documented and stable interface to Oracle it is hard to do anything with Alpha Five. It's essential for us.

                  I won't give up yet, because Alpha Five V10 seems to be as productive as Oracle Forms.

                  Comment


                    #10
                    Re: Oracle stored functions

                    Sorry HarryT, I saw:

                    sqlStatement = "COUNT_EMP" + "'"+p_from+"','"+p_to+"'"


                    And that would have translated to COUNT plus whatever was in p_from, you need a space or as it was pointed out a "(" , which I forgot :(

                    I am evaluating Alpha as a front end to Oracle as well, a tad frustrating. I actually prefer Oracle forms 6 (before JInitiator etc) and actually Forms 4.5 to be honest (Yes, I am dating myself)

                    But I like what Alpha is trying to accomplish, have you tried REF CURSOR's yet returning a result set?

                    Comment


                      #11
                      Re: Oracle stored functions

                      I don't have Oracle but I wonder whether your stored function is syntactically correct. It is strange to me that it says
                      RETURN number as
                      l_count number

                      in the definition.
                      Anyhow, I have a few stored functions in MySQL that work fine.
                      Here is one:
                      Code:
                      DELIMITER $$
                      
                      DROP FUNCTION IF EXISTS `wms`.`age` $$
                      CREATE DEFINER=`root`@`localhost` FUNCTION `age`(dob date) RETURNS int(11)
                          DETERMINISTIC
                      begin
                      declare y1 integer;
                      declare m1 integer;
                      declare d1 integer;
                      declare y2 integer;
                      declare m2 integer;
                      declare d2 integer;
                      declare age2 integer;
                      
                      set y1=year(dob);
                      set m1=month(dob);
                      set d1=day(dob);
                      
                      set y2=year(current_date());
                      set m2=month(current_date());
                      set d2=day(current_date());
                      
                      set age2=y2-y1;
                      if m2<m1 then
                        set age2=age2-1;
                      end if;
                      
                      if m1=m2 and d2<d1 then
                        set age2=age2-1;
                      end if;
                      
                      return age2;
                      
                      
                      end $$
                      
                      DELIMITER ;
                      and then to use it from Alpha Five:
                      Code:
                      dim cnw as sql::connetion
                      cnw.open("::name::wms")
                      sql="SELECT age('19800101') as result"
                      
                      ? cnw.execute(sql)
                      = .T.
                      
                      rs=cnw.ResultSet 
                      
                      ? rs.data("result")
                      = 30

                      Comment


                        #12
                        Re: Oracle stored functions

                        It is, I compiled it on my Oracle db here

                        Comment


                          #13
                          Re: Oracle stored functions

                          Hi Brent,
                          we stay still at Oracle Forms6i because it's Client/Server, very productice, stable and fast.
                          No need for Web Forms 9i-11g with a full blown App Server!
                          Till today Forms6i C/S with MS Windows Terminal Server or Citrix MetaFrame is for us the better solution.

                          > have you tried REF CURSOR's yet returning a result set

                          No, but refcursor would have been my next question to Xbasic and Alpha:
                          (also what's about OUT parameters?)
                          ------- PL/SQL stored function
                          create or replace
                          FUNCTION REFCURSOR_EMP
                          (p_from in number,
                          p_to in number)
                          RETURN SYS_REFCURSOR
                          AS
                          l_rc SYS_REFCURSOR;
                          BEGIN
                          open l_rc for
                          select *
                          from emp
                          where empno between p_from and p_to;
                          return l_rc;
                          END REFCURSOR_EMP;
                          -------

                          Can any AlphaFive+Xbasic+Oracle specialist help?

                          Comment


                            #14
                            Re: Oracle stored functions

                            Peter,
                            the stored function with
                            "RETURN number AS
                            l_count integer;"
                            is correct Oracle Syntax.

                            "RETURN number AS" declares the return TYPE
                            and
                            "l_count number" the return VARIABLE

                            Comment


                              #15
                              Re: Oracle stored functions

                              You lost me..

                              But here goes ;)

                              The out parameter that is returned by the function must be defined in alpha somewhere to accept it....me thinks.

                              If you wish to use your ref cursor in sql plus you would have to define it first then call it

                              variable v1 refcursor.reftype
                              execute :v1 := getfuncblahblah(parms)
                              print v1

                              Comment

                              Working...
                              X