Home » SQL & PL/SQL » SQL & PL/SQL » A more elegant/flexible solution to sum five numbers (Oracle 11g Express, Windows 8)
icon5.gif  A more elegant/flexible solution to sum five numbers [message #582101] Sat, 13 April 2013 07:08 Go to next message
Kimberlicious
Messages: 10
Registered: April 2013
Junior Member
Hey, I am creating a function to sum five numbers (less 1).

Basically, I think my method of solving this problem is not very flexible, is it possible to have an array of numbers in an SQL function, and how would this be implemented? (Im sorry, I am very new to all this and haven`t really got a clue).

Here is the screenshot of my output (I cannot embed links until 5 posts!): flic.kr/p/eaSHBP

And my code:


CREATE OR REPLACE FUNCTION sumfivenumbers ( n1 NUMBER, n2 NUMBER, n3 NUMBER, n4 NUMBER, n5 NUMBER)
RETURN NUMBER
IS
   Sumnums NUMBER;    
BEGIN
     SELECT SUM(n1+n2+n3+n4+n5-1) INTO Sumnums FROM DUAL;      
      DBMS_OUTPUT.PUT_LINE(Sumnums);
RETURN 1;
END sumfivenumbers;
/

SELECT sumfivenumbers(5,5,5,5,5) AS "Five Numbers less 1" FROM DUAL;



Any tips or suggestions you may have would be greatly appreciated Smile
Re: A more elegant/flexible solution to sum five numbers [message #582108 is a reply to message #582101] Sat, 13 April 2013 08:00 Go to previous messageGo to next message
Michel Cadot
Messages: 68644
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
SQL> CREATE OR REPLACE FUNCTION sumfivenumbers (n sys.odcinumberlist)
  2  RETURN NUMBER
  3  IS
  4     Sumnums NUMBER;    
  5  BEGIN
  6    Sumnums := 0;
  7    FOR i IN n.FIRST..n.LAST LOOP
  8      Sumnums := Sumnums + n(i);
  9    END LOOP;
 10    Sumnums := Sumnums - 1;
 11    RETURN Sumnums;
 12  END sumfivenumbers;
 13  /

Function created.

SQL> SELECT sumfivenumbers (sys.odcinumberlist(5,5,5,5,5)) AS "Five Numbers less 1" FROM DUAL;
Five Numbers less 1
-------------------
                 24

1 row selected.

Regards
Michel
Re: A more elegant/flexible solution to sum five numbers [message #582109 is a reply to message #582108] Sat, 13 April 2013 08:02 Go to previous messageGo to next message
Michel Cadot
Messages: 68644
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
But you don't need PL/SQL for that, you can do it in a single SQL statement:
SQL> SELECT sum(column_value)-1 AS "Five Numbers less 1" 
  2  FROM table(sys.odcinumberlist(5,5,5,5,5))
  3  /
Five Numbers less 1
-------------------
                 24

1 row selected.

Regards
Michel
Re: A more elegant/flexible solution to sum five numbers [message #582114 is a reply to message #582109] Sat, 13 April 2013 09:25 Go to previous messageGo to next message
Kimberlicious
Messages: 10
Registered: April 2013
Junior Member

Many Thanks Michel, you have really sped up the learning process for me and made life a little less stressfull! Smile
Re: A more elegant/flexible solution to sum five numbers [message #582117 is a reply to message #582114] Sat, 13 April 2013 09:40 Go to previous messageGo to next message
Solomon Yakobson
Messages: 3273
Registered: January 2010
Location: Connecticut, USA
Senior Member
Well, I just assume using function or TABLE operator instead of plain

SELECT 5 + 5 + 5 + 5 + 5 - 1 FROM DUAL
/


is just for learning purposes.

SY.

icon14.gif  Re: A more elegant/flexible solution to sum five numbers [message #582120 is a reply to message #582117] Sat, 13 April 2013 09:54 Go to previous messageGo to next message
Kimberlicious
Messages: 10
Registered: April 2013
Junior Member
Solomon Yakobson wrote on Sat, 13 April 2013 09:40
Well, I just assume using function or TABLE operator instead of plain

SELECT 5 + 5 + 5 + 5 + 5 - 1 FROM DUAL
/


is just for learning purposes.

SY.



Ya, we are to make a function.
Re: A more elegant/flexible solution to sum five numbers [message #582135 is a reply to message #582120] Sat, 13 April 2013 19:30 Go to previous messageGo to next message
Solomon Yakobson
Messages: 3273
Registered: January 2010
Location: Connecticut, USA
Senior Member
Why? What it will give you besides degraded performance?

SY.
Re: A more elegant/flexible solution to sum five numbers [message #582137 is a reply to message #582135] Sat, 13 April 2013 20:11 Go to previous message
rleishman
Messages: 3728
Registered: October 2005
Location: Melbourne, Australia
Senior Member
Sounds like a class exercise. It's not uncommon for teachers to set a simple and perhaps meaningless assignment (summing 5 numbers less 1) to practice a non-trivial skill (create a function with arguments).
If I'm right, then I wouldn't expect extra credit for using features like nested tables that are completely out of scope of the assignment. I'd be looking to dress it up with an optional decrement parameter (in case you want to subtract something other than 1), making it DETERMINISTIC and PARALLEL and enabling the RESULT_CACHE.

Ross Leishman
Previous Topic: row modify in table
Next Topic: Print an update confirmation
Goto Forum:
  


Current Time: Wed Apr 24 00:51:42 CDT 2024