class_docstr: Interact with Oracle SQL.
  
  :param oracle_conn_id: The :ref:`Oracle connection id <howto/connection:oracle>`
      used for Oracle credentials.
  :param thick_mode: Specify whether to use python-oracledb in thick mode. Defaults to False.
      If set to True, you must have the Oracle Client libraries installed.
      See `oracledb docs<https://python-oracledb.readthedocs.io/en/latest/user_guide/initialization.html>`
      for more info.
  :param thick_mode_lib_dir: Path to use to find the Oracle Client libraries when using thick mode.
      If not specified, defaults to the standard way of locating the Oracle Client library on the OS.
      See `oracledb docs
      <https://python-oracledb.readthedocs.io/en/latest/user_guide/initialization.html#setting-the-oracle-client-library-directory>`
      for more info.
  :param thick_mode_config_dir: Path to use to find the Oracle Client library
      configuration files when using thick mode.
      If not specified, defaults to the standard way of locating the Oracle Client
      library configuration files on the OS.
      See `oracledb docs
      <https://python-oracledb.readthedocs.io/en/latest/user_guide/initialization.html#optional-oracle-net-configuration-files>`
      for more info.
  :param fetch_decimals: Specify whether numbers should be fetched as ``decimal.Decimal`` values.
      See `defaults.fetch_decimals
      <https://python-oracledb.readthedocs.io/en/latest/api_manual/defaults.html#defaults.fetch_decimals>`
      for more info.
  :param fetch_lobs: Specify whether to fetch strings/bytes for CLOBs or BLOBs instead of locators.
      See `defaults.fetch_lobs
      <https://python-oracledb.readthedocs.io/en/latest/api_manual/defaults.html#defaults.fetch_decimals>`
      for more info.
class_docstr_tok: ["Interact","with","Oracle","SQL",".",":","param","oracle_conn_id",":","The",":","ref",":","`","Oracle","connection","id","<","howto\/connection",":","oracle",">","`","used","for","Oracle","credentials",".",":","param","thick_mode",":","Specify","whether","to","use","python-oracledb","in","thick","mode",".","Defaults","to","False",".","If","set","to","True",",","you","must","have","the","Oracle","Client","libraries","installed",".","See","`","oracledb","docs","<","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/user_guide\/initialization.html",">","`","for","more","info",".",":","param","thick_mode_lib_dir",":","Path","to","use","to","find","the","Oracle","Client","libraries","when","using","thick","mode",".","If","not","specified",",","defaults","to","the","standard","way","of","locating","the","Oracle","Client","library","on","the","OS",".","See","`","oracledb","docs","<","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/user_guide\/initialization.html","#","setting-the-oracle-client-library-directory",">","`","for","more","info",".",":","param","thick_mode_config_dir",":","Path","to","use","to","find","the","Oracle","Client","library","configuration","files","when","using","thick","mode",".","If","not","specified",",","defaults","to","the","standard","way","of","locating","the","Oracle","Client","library","configuration","files","on","the","OS",".","See","`","oracledb","docs","<","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/user_guide\/initialization.html","#","optional-oracle-net-configuration-files",">","`","for","more","info",".",":","param","fetch_decimals",":","Specify","whether","numbers","should","be","fetched","as","``","decimal.Decimal","``","values",".","See","`","defaults.fetch_decimals","<","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/api_manual\/defaults.html","#","defaults.fetch_decimals",">","`","for","more","info",".",":","param","fetch_lobs",":","Specify","whether","to","fetch","strings\/bytes","for","CLOBs","or","BLOBs","instead","of","locators",".","See","`","defaults.fetch_lobs","<","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/api_manual\/defaults.html","#","defaults.fetch_decimals",">","`","for","more","info","."]
docstr: Call the stored procedure identified by the provided string.
  
  Any OUT parameters must be provided with a value of either the
  expected Python type (e.g., `int`) or an instance of that type.
  
  The return value is a list or mapping that includes parameters in
  both directions; the actual return type depends on the type of the
  provided `parameters` argument.
  
  See
  https://python-oracledb.readthedocs.io/en/latest/api_manual/cursor.html#Cursor.var
  for further reference.
docstr_tok: ["Call","the","stored","procedure","identified","by","the","provided","string",".","Any","OUT","parameters","must","be","provided","with","a","value","of","either","the","expected","Python","type","(","e.g.",",","`","int","`",")","or","an","instance","of","that","type",".","The","return","value","is","a","list","or","mapping","that","includes","parameters","in","both","directions",";","the","actual","return","type","depends","on","the","type","of","the","provided","`","parameters","`","argument",".","See","https",":","\/\/python-oracledb.readthedocs.io\/en\/latest\/api_manual\/cursor.html","#","Cursor.var","for","further","reference","."]
code: def callproc(
      self,
      identifier: str,
      autocommit: bool = False,
      parameters: list | dict | None = None,
  ) -> list | dict | tuple | None:
      """
      Call the stored procedure identified by the provided string.
  
      Any OUT parameters must be provided with a value of either the
      expected Python type (e.g., `int`) or an instance of that type.
  
      The return value is a list or mapping that includes parameters in
      both directions; the actual return type depends on the type of the
      provided `parameters` argument.
  
      See
      https://python-oracledb.readthedocs.io/en/latest/api_manual/cursor.html#Cursor.var
      for further reference.
      """
      if parameters is None:
          parameters = []
  
      args = ",".join(
          f":{name}"
          for name in (
              parameters
              if isinstance(parameters, dict)
              else range(1, len(parameters) + 1)
          )
      )
  
      sql = f"BEGIN {identifier}({args}); END;"
  
      def handler(cursor):
          if cursor.bindvars is None:
              return
  
          if isinstance(cursor.bindvars, list):
              return [v.getvalue() for v in cursor.bindvars]
  
          if isinstance(cursor.bindvars, dict):
              return {
                  n: v.getvalue() for (n, v) in cursor.bindvars.items()
              }
  
          raise TypeError(f"Unexpected bindvars: {cursor.bindvars!r}")
  
      result = self.run(
          sql,
          autocommit=autocommit,
          parameters=(
              {
                  name: _map_param(value)
                  for (name, value) in parameters.items()
              }
              if isinstance(parameters, dict)
              else [_map_param(value) for value in parameters]
          ),
          handler=handler,
      )
  
      return result
  
file_path: airflow/airflow/providers/oracle/hooks/oracle.py
imports: from __future__ import annotations
  import math
  import warnings
  from datetime import datetime
  import oracledb
  from airflow.exceptions import AirflowProviderDeprecationWarning
  from airflow.providers.common.sql.hooks.sql import DbApiHook
label_desc: Use image node_id 5 for calling the OracleHook obj's underlying member method code with example usage: obj.callproc(identifier, autocommit, parameters) and returns: result, unknown, unknown