142 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @file oracle.php
 | |
|  * @date 2018-03-27
 | |
|  * @author Go Namhyeon <gnh1201@gmail.com>
 | |
|  * @brief Oracle database helper for ReasonableFramework
 | |
|  */
 | |
| 
 | |
| if(!check_function_exists("check_db_oracle_installed")) {
 | |
|     function check_db_oracle_installed() {
 | |
|         $fn = check_invalid_function(array(
 | |
|             "NO_FUNCTION_OCI_PARSE" => "oci_parse",
 | |
|             "NO_FUNCTION_OCI_EXECUTE" => "oci_execute",
 | |
|             "NO_FUNCTION_OCI_FETCH_ASSOC" => "oci_fetch_assoc",
 | |
|             "NO_FUNCTION_OCI_FREE_STATEMENT" => "oci_free_statement",
 | |
|             "NO_FUNCTION_OCI_CLOSE" => "oci_close",
 | |
|         ));
 | |
|         
 | |
|         $is_installed = ($fn == -1);
 | |
|         if(!$is_installed) {
 | |
|             set_error($fn);
 | |
|         }
 | |
| 
 | |
|         return $is_installed;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("get_db_orable_binded_sql")) {
 | |
|     function get_db_orable_binded_sql($sql, $bind) {
 | |
|         return get_db_binded_sql($sql, $bind);
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("get_db_oracle_stmt")) {
 | |
|     function get_db_oracle_stmt($sql, $bind) {
 | |
|         $stmt = NULL;
 | |
| 
 | |
|         if(!check_db_oracle_installed()) {
 | |
|             show_errors();
 | |
|         }
 | |
| 
 | |
|         $sql = get_db_orable_binded_sql($sql, $bind);
 | |
|         $stmt = oci_parse($conn, $sql);
 | |
| 
 | |
|         return $stmt;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("exec_db_oracle_connect")) {
 | |
|     function exec_db_oracle_connect($host, $port, $user, $password, $options=array()) {
 | |
|         $conn = NULL;
 | |
|         $envs = get_value_in_array("envs", $options, array());
 | |
| 
 | |
|         if(!check_db_oracle_installed()) {
 | |
|             show_errors();
 | |
|         }
 | |
| 
 | |
|         if(array_key_empty("NLS_LANG", $envs)) {
 | |
|             $envs["NLS_LANG"] = "KOREAN_KOREA.AL32UTF8";
 | |
|         }
 | |
| 
 | |
|         // set environment variables
 | |
|         foreach($envs as $env) {
 | |
|             putenv($env);
 | |
|         }
 | |
| 
 | |
|         // get oracle db connection info
 | |
|         $dbs_id = read_storage_file("tnsname.orax", array(
 | |
|             "storage_type" => "example",
 | |
|         ));
 | |
| 
 | |
|         // set replace rules
 | |
|         $dbs_rules = array(
 | |
|             "protocol" => get_value_in_array("service_name", $options, "TCP"),
 | |
|             "service_name" => get_value_in_array("service_name", $options, "ORCL"),
 | |
|             "host" => $host,
 | |
|             "port" => $port,
 | |
|             "server_type" => "DEDICATED"
 | |
|         );
 | |
|         
 | |
|         // parse db connection info
 | |
|         foreach($dbs_rules as $k=>$v) {
 | |
|             $dbs_id = str_replace("%" . $k . "%", $v, $dbs_id);
 | |
|         }
 | |
| 
 | |
|         // set db connection
 | |
|         $conn = @oci_connect($user, $password, $dbs_id);
 | |
| 
 | |
|         return $conn;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("exec_db_oracle_fetch_all")) {
 | |
|     function exec_db_oracle_fetch_all($sql, $bind, $conn) {
 | |
|         $rows = array();
 | |
| 
 | |
|         if(!check_db_oracle_installed()) {
 | |
|             show_errors();
 | |
|         }
 | |
| 
 | |
|         $stmt = get_db_oracle_stmt($sql, $bind);
 | |
|         oci_execute($stmt);
 | |
| 
 | |
|         while($row = oci_fetch_assoc($stmt)) {
 | |
|             $rows[] = $row;
 | |
|         }
 | |
| 
 | |
|         oci_free_statement($stmt);
 | |
| 
 | |
|         return $rows;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("exec_db_oracle_query")) {
 | |
|     function exec_db_oracle_query($sql, $bind, $conn) {
 | |
|         $flag = false;
 | |
| 
 | |
|         if(!check_db_oracle_installed()) {
 | |
|             show_errors();
 | |
|         }
 | |
| 
 | |
|         $stmt = get_db_oracle_stmt($sql, $bind);
 | |
|         $flag = oci_execute($stmt);
 | |
| 
 | |
|         oci_free_statement($stmt);
 | |
| 
 | |
|         return $flag;
 | |
|     }
 | |
| }
 | |
| 
 | |
| if(!check_function_exists("close_db_oracle_connect")) {
 | |
|     function close_db_oracle_connect() {
 | |
|         $dbc = get_scope("dbc");
 | |
| 
 | |
|         if(!check_db_oracle_installed()) {
 | |
|             show_errors();
 | |
|         }
 | |
| 
 | |
|         return @oci_close($dbc);
 | |
|     }
 | |
| }
 |