#!/usr/bin/env python
import sys
import csv
import cx_Oracle
import codecs
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
conn = cx_Oracle.connect("vivigsrp", "vivigsrp", "10.1.1.210/orcl")
curs = conn .cursor()
str1='nice'
str2=' '
#x=curs.callproc('p_demo',[str1,str2]) #x返回的是个array类型的in out组成
lstr1,lstr2=curs.callproc('p_demo',[str1,str2])
print(str2) #这个是取不到返回的out参数的
print(lstr1) #这个是in参数
print(lstr2) #这个是out参数
str2=curs.callfunc('f_demo',cx_Oracle.STRING,[str1])
print(str2)
curs.close()
conn.close()
p_demo( in ,out)
f_demo(in) return varchar2
找到取不到值的原因了,出参需要特殊声明一下:
这里主要测试在Python中通过cx_Oracle调用PL/SQL。
首先,在数据库端创建简单的存储过程。
1 2 3 4 |
|
然后,开始在Python命令行中进行存储过程调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
延伸阅读:
存储过程、cx_Oracle、Python的对象类型之间存在转换关系。具体如下:
Oracle | cx_Oracle | Python |
VARCHAR2, NVARCHAR2, LONG | cx_Oracle.STRING | str |
CHAR | cx_Oracle.FIXED_CHAR | str |
NUMBER | cx_Oracle.NUMBER | int |
FLOAT | cx_Oracle.NUMBER | float |
DATE | cx_Oracle.DATETIME | datetime.datetime |
TIMESTAMP | cx_Oracle.TIMESTAMP | datetime.datetime |
CLOB | cx_Oracle.CLOB | cx_Oracle.LOB |
BLOB | cx_Oracle.BLOB | cx_Oracle.LOB |
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》