Cannot call function which is defined in a PL/SQL package












-1















I have this PL/SQL package:



create or replace package palindrome as
function check_palindrome(num int) return int;
end palindrome;


create or replace package body palindrome as
function check_palindrome(num int) return int as
ans int;
z int;
r int;
rev int;
begin
z := num;

while z > 0 loop
r := mod(z,10);
rev := rev*10+r;
z := floor(z/10);
end loop;

if rev=num then
dbms_output.put_line('the no '||num ||' is a palindrome ');
else
dbms_output.put_line('the no '||num ||' is not a palindrome ');
end if;
end check_palindrome;
end palindrome;


I created the above package which has one function check_palindrome(), but when I try to call the function using



begin
palindrome.check_palindrome(343);
end;


I get this error



Error report -
ORA-06550: line 2, column 5:
PLS-00221: 'CHECK_PALINDROME' is not a procedure or is undefined
ORA-06550: line 2, column 5:
PL/SQL: Statement ignored


Why am I getting this error? The package body is compiled successfully but I am getting this error while calling the function.










share|improve this question





























    -1















    I have this PL/SQL package:



    create or replace package palindrome as
    function check_palindrome(num int) return int;
    end palindrome;


    create or replace package body palindrome as
    function check_palindrome(num int) return int as
    ans int;
    z int;
    r int;
    rev int;
    begin
    z := num;

    while z > 0 loop
    r := mod(z,10);
    rev := rev*10+r;
    z := floor(z/10);
    end loop;

    if rev=num then
    dbms_output.put_line('the no '||num ||' is a palindrome ');
    else
    dbms_output.put_line('the no '||num ||' is not a palindrome ');
    end if;
    end check_palindrome;
    end palindrome;


    I created the above package which has one function check_palindrome(), but when I try to call the function using



    begin
    palindrome.check_palindrome(343);
    end;


    I get this error



    Error report -
    ORA-06550: line 2, column 5:
    PLS-00221: 'CHECK_PALINDROME' is not a procedure or is undefined
    ORA-06550: line 2, column 5:
    PL/SQL: Statement ignored


    Why am I getting this error? The package body is compiled successfully but I am getting this error while calling the function.










    share|improve this question



























      -1












      -1








      -1








      I have this PL/SQL package:



      create or replace package palindrome as
      function check_palindrome(num int) return int;
      end palindrome;


      create or replace package body palindrome as
      function check_palindrome(num int) return int as
      ans int;
      z int;
      r int;
      rev int;
      begin
      z := num;

      while z > 0 loop
      r := mod(z,10);
      rev := rev*10+r;
      z := floor(z/10);
      end loop;

      if rev=num then
      dbms_output.put_line('the no '||num ||' is a palindrome ');
      else
      dbms_output.put_line('the no '||num ||' is not a palindrome ');
      end if;
      end check_palindrome;
      end palindrome;


      I created the above package which has one function check_palindrome(), but when I try to call the function using



      begin
      palindrome.check_palindrome(343);
      end;


      I get this error



      Error report -
      ORA-06550: line 2, column 5:
      PLS-00221: 'CHECK_PALINDROME' is not a procedure or is undefined
      ORA-06550: line 2, column 5:
      PL/SQL: Statement ignored


      Why am I getting this error? The package body is compiled successfully but I am getting this error while calling the function.










      share|improve this question
















      I have this PL/SQL package:



      create or replace package palindrome as
      function check_palindrome(num int) return int;
      end palindrome;


      create or replace package body palindrome as
      function check_palindrome(num int) return int as
      ans int;
      z int;
      r int;
      rev int;
      begin
      z := num;

      while z > 0 loop
      r := mod(z,10);
      rev := rev*10+r;
      z := floor(z/10);
      end loop;

      if rev=num then
      dbms_output.put_line('the no '||num ||' is a palindrome ');
      else
      dbms_output.put_line('the no '||num ||' is not a palindrome ');
      end if;
      end check_palindrome;
      end palindrome;


      I created the above package which has one function check_palindrome(), but when I try to call the function using



      begin
      palindrome.check_palindrome(343);
      end;


      I get this error



      Error report -
      ORA-06550: line 2, column 5:
      PLS-00221: 'CHECK_PALINDROME' is not a procedure or is undefined
      ORA-06550: line 2, column 5:
      PL/SQL: Statement ignored


      Why am I getting this error? The package body is compiled successfully but I am getting this error while calling the function.







      oracle plsql oracle11g






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 17 '18 at 13:00









      William Robertson

      8,28932233




      8,28932233










      asked Nov 17 '18 at 11:10









      AdarshAdarsh

      172




      172
























          2 Answers
          2






          active

          oldest

          votes


















          3














          You've declared a FUNCTION, which RETURNS a value, but you've called it like you would a PROCEDURE, so you need:



          DECLARE
          the_val INT;
          BEGIN
          the_val := PALINDROME.check_palindrome(343);
          END;
          /





          share|improve this answer

































            1














            Your program doesn't actually return anything and there seems no value in correcting that as you're just displaying the outcome to the screen. Instead you should turn it into a procedure:



            create or replace package palindrome as
            procedure check_palindrome(num int) ;
            end palindrome;


            create or replace package body palindrome as
            procedure check_palindrome(num int) as
            ans int;
            z int;
            r int;
            rev int;
            begin
            z := num;

            while z > 0 loop
            r := mod(z,10);
            rev := rev*10+r;
            z := floor(z/10);
            end loop;

            if rev=num then
            dbms_output.put_line('the no '||num ||' is a palindrome ');
            else
            dbms_output.put_line('the no '||num ||' is not a palindrome ');
            end if;
            end check_palindrome;
            end palindrome;


            Then you can call it successfully:



            begin
            palindrome.check_palindrome(343);
            end;





            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53350633%2fcannot-call-function-which-is-defined-in-a-pl-sql-package%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              3














              You've declared a FUNCTION, which RETURNS a value, but you've called it like you would a PROCEDURE, so you need:



              DECLARE
              the_val INT;
              BEGIN
              the_val := PALINDROME.check_palindrome(343);
              END;
              /





              share|improve this answer






























                3














                You've declared a FUNCTION, which RETURNS a value, but you've called it like you would a PROCEDURE, so you need:



                DECLARE
                the_val INT;
                BEGIN
                the_val := PALINDROME.check_palindrome(343);
                END;
                /





                share|improve this answer




























                  3












                  3








                  3







                  You've declared a FUNCTION, which RETURNS a value, but you've called it like you would a PROCEDURE, so you need:



                  DECLARE
                  the_val INT;
                  BEGIN
                  the_val := PALINDROME.check_palindrome(343);
                  END;
                  /





                  share|improve this answer















                  You've declared a FUNCTION, which RETURNS a value, but you've called it like you would a PROCEDURE, so you need:



                  DECLARE
                  the_val INT;
                  BEGIN
                  the_val := PALINDROME.check_palindrome(343);
                  END;
                  /






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 17 '18 at 11:29

























                  answered Nov 17 '18 at 11:16









                  TenGTenG

                  2,11821323




                  2,11821323

























                      1














                      Your program doesn't actually return anything and there seems no value in correcting that as you're just displaying the outcome to the screen. Instead you should turn it into a procedure:



                      create or replace package palindrome as
                      procedure check_palindrome(num int) ;
                      end palindrome;


                      create or replace package body palindrome as
                      procedure check_palindrome(num int) as
                      ans int;
                      z int;
                      r int;
                      rev int;
                      begin
                      z := num;

                      while z > 0 loop
                      r := mod(z,10);
                      rev := rev*10+r;
                      z := floor(z/10);
                      end loop;

                      if rev=num then
                      dbms_output.put_line('the no '||num ||' is a palindrome ');
                      else
                      dbms_output.put_line('the no '||num ||' is not a palindrome ');
                      end if;
                      end check_palindrome;
                      end palindrome;


                      Then you can call it successfully:



                      begin
                      palindrome.check_palindrome(343);
                      end;





                      share|improve this answer




























                        1














                        Your program doesn't actually return anything and there seems no value in correcting that as you're just displaying the outcome to the screen. Instead you should turn it into a procedure:



                        create or replace package palindrome as
                        procedure check_palindrome(num int) ;
                        end palindrome;


                        create or replace package body palindrome as
                        procedure check_palindrome(num int) as
                        ans int;
                        z int;
                        r int;
                        rev int;
                        begin
                        z := num;

                        while z > 0 loop
                        r := mod(z,10);
                        rev := rev*10+r;
                        z := floor(z/10);
                        end loop;

                        if rev=num then
                        dbms_output.put_line('the no '||num ||' is a palindrome ');
                        else
                        dbms_output.put_line('the no '||num ||' is not a palindrome ');
                        end if;
                        end check_palindrome;
                        end palindrome;


                        Then you can call it successfully:



                        begin
                        palindrome.check_palindrome(343);
                        end;





                        share|improve this answer


























                          1












                          1








                          1







                          Your program doesn't actually return anything and there seems no value in correcting that as you're just displaying the outcome to the screen. Instead you should turn it into a procedure:



                          create or replace package palindrome as
                          procedure check_palindrome(num int) ;
                          end palindrome;


                          create or replace package body palindrome as
                          procedure check_palindrome(num int) as
                          ans int;
                          z int;
                          r int;
                          rev int;
                          begin
                          z := num;

                          while z > 0 loop
                          r := mod(z,10);
                          rev := rev*10+r;
                          z := floor(z/10);
                          end loop;

                          if rev=num then
                          dbms_output.put_line('the no '||num ||' is a palindrome ');
                          else
                          dbms_output.put_line('the no '||num ||' is not a palindrome ');
                          end if;
                          end check_palindrome;
                          end palindrome;


                          Then you can call it successfully:



                          begin
                          palindrome.check_palindrome(343);
                          end;





                          share|improve this answer













                          Your program doesn't actually return anything and there seems no value in correcting that as you're just displaying the outcome to the screen. Instead you should turn it into a procedure:



                          create or replace package palindrome as
                          procedure check_palindrome(num int) ;
                          end palindrome;


                          create or replace package body palindrome as
                          procedure check_palindrome(num int) as
                          ans int;
                          z int;
                          r int;
                          rev int;
                          begin
                          z := num;

                          while z > 0 loop
                          r := mod(z,10);
                          rev := rev*10+r;
                          z := floor(z/10);
                          end loop;

                          if rev=num then
                          dbms_output.put_line('the no '||num ||' is a palindrome ');
                          else
                          dbms_output.put_line('the no '||num ||' is not a palindrome ');
                          end if;
                          end check_palindrome;
                          end palindrome;


                          Then you can call it successfully:



                          begin
                          palindrome.check_palindrome(343);
                          end;






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 17 '18 at 13:05









                          APCAPC

                          118k15117229




                          118k15117229






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53350633%2fcannot-call-function-which-is-defined-in-a-pl-sql-package%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Guess what letter conforming each word

                              Port of Spain

                              Run scheduled task as local user group (not BUILTIN)