Use DBMS_SQL package to parse math expression : DBMS_SQL « System Packages « Oracle PL/SQL Tutorial

Home
Oracle PL/SQL Tutorial
1.Introduction
2.Query Select
3.Set
4.Insert Update Delete
5.Sequences
6.Table
7.Table Joins
8.View
9.Index
10.SQL Data Types
11.Character String Functions
12.Aggregate Functions
13.Date Timestamp Functions
14.Numerical Math Functions
15.Conversion Functions
16.Analytical Functions
17.Miscellaneous Functions
18.Regular Expressions Functions
19.Statistical Functions
20.Linear Regression Functions
21.PL SQL Data Types
22.PL SQL Statements
23.PL SQL Operators
24.PL SQL Programming
25.Cursor
26.Collections
27.Function Procedure Packages
28.Trigger
29.SQL PLUS Session Environment
30.System Tables Data Dictionary
31.System Packages
32.Object Oriented
33.XML
34.Large Objects
35.Transaction
36.User Privilege
Oracle PL/SQL Tutorial » System Packages » DBMS_SQL 
31.26.15.Use DBMS_SQL package to parse math expression
SQL>
SQL> CREATE OR REPLACE FUNCTION math_calc(p_statement_txt VARCHAR2,
  2     p_precision_num PLS_INTEGER := 2)
  3  RETURN NUMBER IS
  4     lv_cursor_id_num    PLS_INTEGER;
  5     lv_statement_txt    VARCHAR2(500);
  6     lv_rowcount_num     PLS_INTEGER;
  7     lv_return_value_num NUMBER;
  8  BEGIN
  9     lv_cursor_id_num := DBMS_SQL.OPEN_CURSOR;
 10     lv_statement_txt :=
 11        'BEGIN ' ||
 12        '    :lv_value_num := ' || p_statement_txt || ';' ||
 13        'END;';
 14
 15     DBMS_SQL.PARSE(lv_cursor_id_num, lv_statement_txt,DBMS_SQL.NATIVE);
 16
 17     DBMS_SQL.BIND_VARIABLE(lv_cursor_id_num, ':lv_value_num', lv_return_value_num);
 18
 19     lv_rowcount_num := DBMS_SQL.EXECUTE(lv_cursor_id_num);
 20
 21     DBMS_SQL.VARIABLE_VALUE(lv_cursor_id_num, ':lv_value_num',lv_return_value_num);
 22     DBMS_SQL.CLOSE_CURSOR(lv_cursor_id_num);
 23     RETURN ROUND(lv_return_value_num, p_precision_num);
 24  EXCEPTION
 25     WHEN OTHERS THEN
 26        IF DBMS_SQL.IS_OPEN(lv_cursor_id_numTHEN
 27           DBMS_SQL.CLOSE_CURSOR(lv_cursor_id_num);
 28        END IF;
 29        RAISE_APPLICATION_ERROR(-20101'Error processing SQL ' ||
 30           'statement in MATH_CALC procedure', FALSE);
 31  END math_calc;
 32  /

Function created.

SQL>
SQL>
SQL> SET SERVEROUTPUT ON SIZE 1000000
SQL> DECLARE
  2     lv_return_num NUMBER;
  3  BEGIN
  4     lv_return_num := math_calc('4*5', 2);
  5     DBMS_OUTPUT.PUT_LINE('Value: ' || lv_return_num);
  6  END;
  7  /
Value: 20

PL/SQL procedure successfully completed.

SQL>
31.26.DBMS_SQL
31.26.1.dbms_sql.number_table
31.26.2.Close a cursor
31.26.3.Assign date with DBMS_SQL package
31.26.4.Create Pl/SQL block dynamically and then execute it by calling 'DBMS_SQL.EXECUTE'
31.26.5.DBMS_SQL.PARSE
31.26.6.An example of using DBMS_SQL.OPEN_CURSOR
31.26.7.Package for running dynamic sql based on DBMS_SQL package
31.26.8.Wrap dbms_sql package
31.26.9.Dump Column long with DBMS_SQL.DEFINE_COLUMN_LONG
31.26.10.DBMS_SQL.BIND_VARIABLE and DBMS_SQL.EXECUTE
31.26.11.DBMS_SQL.EXECUTE an update statement
31.26.12.Use DBMS_SQL to update a table and get the number of rows updated
31.26.13.DBMS_SQL.VARCHAR2_TABLE and DBMS_SQL.NUMBER_TABLE
31.26.14.Use dynamic SQL to check the business logic
31.26.15.Use DBMS_SQL package to parse math expression
31.26.16.Use a character string of arithmetic logic, selecting against the DUAL table to return a number value.
31.26.17.DBMS_SQL.LAST_ERROR_POSITION
31.26.18.Dump query with dbms_sql
31.26.19.Use dbms_sql.describe_columns
31.26.20.Print table with dynamic query
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.