From ac08df2ee7e9b2cff603b986e5deafeb3ab82d7d Mon Sep 17 00:00:00 2001 From: Timur Tarasenko Date: Thu, 18 Oct 2018 10:27:58 -0500 Subject: [PATCH] Oralce PL/SQL examples of recursion (#91) --- 03_recursion/plsql/01_countdown.sql | 22 ++++++++++++++++++++++ 03_recursion/plsql/02_greet.sql | 28 ++++++++++++++++++++++++++++ 03_recursion/plsql/03_factorial.sql | 22 ++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 03_recursion/plsql/01_countdown.sql create mode 100644 03_recursion/plsql/02_greet.sql create mode 100644 03_recursion/plsql/03_factorial.sql diff --git a/03_recursion/plsql/01_countdown.sql b/03_recursion/plsql/01_countdown.sql new file mode 100644 index 0000000..640ed73 --- /dev/null +++ b/03_recursion/plsql/01_countdown.sql @@ -0,0 +1,22 @@ +SET SERVEROUTPUT ON +DECLARE + result NUMBER; + +FUNCTION countdown(x NUMBER) +RETURN NUMBER +IS + f NUMBER; + +BEGIN + dbms_output.put_line(x); + IF x <= 0 THEN + return x; + ELSE + f := countdown(x - 1); + END IF; +RETURN f; +END; + +BEGIN + result := countdown(5); +END; \ No newline at end of file diff --git a/03_recursion/plsql/02_greet.sql b/03_recursion/plsql/02_greet.sql new file mode 100644 index 0000000..f791c62 --- /dev/null +++ b/03_recursion/plsql/02_greet.sql @@ -0,0 +1,28 @@ +CREATE OR REPLACE PROCEDURE greet2(names IN VARCHAR2 ) +IS +BEGIN + dbms_output.put_line('how are you, ' || names || '?'); +END; +/ + +CREATE OR REPLACE PROCEDURE bye +IS +BEGIN + dbms_output.put_line('ok bye!'); +END; +/ + +CREATE OR REPLACE PROCEDURE greet(names IN VARCHAR2) +IS +BEGIN + dbms_output.put_line('hello, ' || names || '!'); + greet2(names); + dbms_output.put_line('getting ready to say bye...'); + bye(); +END; +/ + +SET SERVEROUTPUT ON +BEGIN + greet('adit'); +END; \ No newline at end of file diff --git a/03_recursion/plsql/03_factorial.sql b/03_recursion/plsql/03_factorial.sql new file mode 100644 index 0000000..697dd93 --- /dev/null +++ b/03_recursion/plsql/03_factorial.sql @@ -0,0 +1,22 @@ +SET SERVEROUTPUT ON +DECLARE + result NUMBER; + +FUNCTION factorial(x NUMBER) +RETURN NUMBER +IS + f NUMBER; + +BEGIN + IF x = 0 THEN + f := 1; + ELSE + f := x * factorial(x - 1); + END IF; +RETURN f; +END; + +BEGIN + result := factorial(5); + dbms_output.put_line(result); +END;