如何在web.py中oracle调用存储过程程

Python 基础教程
python操作mysql数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:
PostgreSQL
Microsoft SQL Server 2000
你可以访问查看详细的支持数据库列表。
不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
Python DB-API使用流程:
引入 API 模块。
获取与数据库的连接。
执行SQL语句和存储过程。
关闭数据库连接。
什么是MySQLdb?
MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
如何安装MySQLdb?
为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL。复制以下代码,并执行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:
Traceback (most recent call last):
File "test.py", line 3, in &module&
import MySQLdb
ImportError: No module named MySQLdb
安装MySQLdb,请访问
,(Linux平台可以访问:)从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。如果您选择二进制文件发行版本的话,安装过程基本安装提示即可完成。如果从源代码进行安装的话,则需要切换到MySQLdb发行版本的顶级目录,并键入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install
注意:请确保您有root权限来安装上述模块。
数据库连接
连接数据库前,请先确认以下事项:
您已经创建了数据库 TESTDB.
在TESTDB数据库中您已经创建了表 EMPLOYEE
EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
在你的机子上已经安装了 Python
MySQLdb 模块。
如果您对sql语句不熟悉,可以访问我们的
以下实例链接Mysql的TESTDB数据库:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()
print "Database version : %s " % data
# 关闭数据库连接
db.close()
执行以上脚本输出结果如下:
Database version : 5.0.45
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME
CHAR(20) NOT NULL,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 关闭数据库连接
db.close()
数据库插入操作
以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# Rollback in case there is any error
db.rollback()
# 关闭数据库连接
db.close()
以上例子也可以写成如下形式:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()
以下代码使用变量向SQL语句中传递参数:
..................................
user_id = "test123"
password = "password"
con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................
数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall():接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME & '%d'" % (1000)
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
print "Error: unable to fecth data"
# 关闭数据库连接
db.close()
以上脚本执行结果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
数据库更新操作
更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 'M' 的 AGE 字段递增 1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()
删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE & '%d'" % (20)
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
# 发生错误时回滚
db.rollback()
# 关闭连接
db.close()
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE & '%d'" % (20)
# 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()
# 发生错误时回滚
db.rollback()
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:
Warning当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError和数据库有关的错误发生时触发。 必须是Error的子类。
DataError当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。
必须是DatabaseError的子类。
OperationalError指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、
数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。
必须是DatabaseError的子类。
IntegrityError完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError
数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。
必须是DatabaseError子类。
ProgrammingError程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、
参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上
使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。
必须是DatabaseError的子类。
反馈内容(*必填)
截图标记颜色
联系方式(邮箱)
联系邮箱:
投稿页面:
记住登录状态
重复输入密码与你相遇 好幸运可我已失去为你泪流满面的权利但愿在我看不到的天际你张开了双翼1 MySQL存储过程和函数过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent
Stored Module,PSM),可以反复调用,运行速度快。1.1 存储过程存储过程是由过程化 SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。1.2 函数这里指自定义函数,因为是用户自己使用过程化 SQL 设计定义的。函数和存储过程类似,都是持久性存储模块。函数的定义和存储过程也类似,不同之处是函数必须指定返回类型。MySQL 命令的执行过程:存储过程和函数可以简化语法分析和编译的过程,提高运行速度。2 我的 MySQL 数据表数据库名:peng表名: imooc_goddess我的创建数据库、建表和插入数据 SQL 语句:/*Navicat MySQL Data TransferSource Server
: localhost_3306Source Server Version : 50712Source Host
: localhost:3306Source Database
: pengTarget Server Type
: MYSQLTarget Server Version : 50712File Encoding
: 65001Date:
20:53:44*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for imooc_goddess-- ----------------------------DROP TABLE IF EXISTS `imooc_goddess`;CREATE TABLE `imooc_goddess` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(30) NOT NULL,
`sex` int(11) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`email` varchar(30) DEFAULT NULL,
`mobile` varchar(11) DEFAULT NULL,
`create_user` varchar(30) DEFAULT NULL,
`create_date` date DEFAULT NULL,
`update_user` varchar(30) DEFAULT NULL,
`update_date` date DEFAULT NULL,
`isdel` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;-- ------------------------------ Records of imooc_goddess-- ----------------------------INSERT INTO `imooc_goddess` VALUES ('2', '小彭', null, '23', null, null, null, null, null, null, null, null);INSERT INTO `imooc_goddess` VALUES ('6', '胖子', '0', '78', '', ', '', 'admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('7', '小溪', '0', '34', '', ', '', 'admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('9', '小霞', null, '23', '', ', '', null, '', null, '', null);INSERT INTO `imooc_goddess` VALUES ('10', 'hh', '1', '23', '', 'jkjfskf', '12323', 'Admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('11', '平', '1', '23', '', ', '1323', 'admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('12', '航母', '1', '23', '', 'jkksjkjf', '1232', 'admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('13', '胖纸', '1', '23', '', 'jjijijij', '1323244', 'admin', '', 'admin', '', '1');INSERT INTO `imooc_goddess` VALUES ('14', '校长', '1', '18', '', ', '', 'admin', '', 'admin', '', '1');3 存储过程的创建模板和调用模板3.1 创建存储过程模板
[ ] 表示可以省略
DEFINER 创建者,省略为默认用户
sp_name 为过程名
sp_name 的参数(proc_paramenter) 可以无或多个
routine_body 过程体
proc_paramenter 类型 :
IN 必须在调用存储过程时指定
OUT 可以被存储过程改变,并且可以返回
INOUT 调用时指定,并且可以被改变和返回
过程体如果是复合结构,则使用 BEGIN …END 语句。CREATE PROCEDURE sp_name(proc_paramenter)BEGINroutine_bodyEND3.2 调用存储过程1. CAll sp_name([parameter[,.....]])2. CALL sp_name[()]4 创建的存储过程存储过程的创建的方式有很多,但是存储过程的创建所需的代码都大同小异。在 电脑的 CMD 命令行创建在 Navicat 表中函数模块新建函数在 Navicat 新建查询(类似命令行方式)其实 Navicat for MySQL 只是一个图形化界面而已,其中的原理都是一样的,CMD 方式还是最经典的,最基础的。示例当我们登录到 MySQL 数据库中时,可以通过SELECT VERSION();,查询到当前 MySQL 版本信息,如下下面是把 SELECT VERSION(); 作为一个过程体,写入到新建的一个存储过程中的三种方式。方式一 CMD命令行方式
因为数据库本来就有自己的函数,创建存储过程名,尽量避免使用数据库相关的名词,可以使用比较独特的名词。创建名为 v1 的存储过程,存储在数据库中,创建其他存储过程时,就不能使用 v1这个名字创建了,否则会发生重名错误。方式二 Navicat 新建查询创建名为 v3 的存储过程方式三 Navicat
新建函数创建名为 v2 的存储过程1.在函数上右击新建函数。2.选择过程。3.这个存储过程没有参数,不填写,点完成。4.在过程体中输入SELECT VERSION();,点击保存,输入过程名 v2 ,确认。还是GIF图来的快当然,调用这 3 种存储过程,都可以在 Navicat 新建查询或 CMD 中通过CALL v1();CALL v2();CALL v3();来调用4.1 创建不带参数的存储过程在 CMD 中执行下面的语句。4.2 创建带有IN类型参数的存储过程
DELIMITER 是MySQL的一个定界符,是告诉mysql解释器,该段命令是否已经结束了,mysql可以执行了
但是,在复合结构中,sql 语句用“;”结尾,但是我们并没有结束输入命令,所以通过
DELIMITER //
修改 默认为 “;”的定界符为”//”, 以后输入 “//”代表命令输入结束,mysql 可以执行了。
DELIMITER ;
改回默认的定界符。
参数名不能和数据表名相同,上面例子的 p_id不能写成 id。
不能更改已经保存的存储过程的函数体,必须先删除该存储过程,再创建新的存储过程。4.3 创建带有 IN和OUT类型参数的存储过程这是一个有输入值和返回值的存储过程。输入要删除的行号 p_id ,之后数据库计算剩余行数 返回到
userNums 中。1.要输入的值为 p_id,返回的值为 userNums。2.在过程体中输入DELETE FROM imooc_goddess WHERE id = p_SELECT COUNT(id) FROM imooc_goddess INTO userN3.点击进入函数,点击运行结果:时间: 00:00.08Procedure executed successfully受影响的行: 1Parameters: IN `p_id` int,OUT `userNums` int14,@numsReturn values: 14, 41.在 CMD 命令行的写法DELIMITER // CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)BEGINDELETE FROM imooc_goddess WHERE id = p_id;SELECT COUNT(id) FROM imooc_goddess INTO userNENDDELIMITER ;
注意如果数据中含有 removeUserAndReturnUserNums 存储过程,更改名称,再创建新的存储过程。在 CMD 命令行调用4.4 创建带有多个OUT类型的存储过程输入年龄,返回删除的行数,和剩余行数。SQL 语句CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED,OUTdeleteUsers SMALLINT UNSIGNED,OUT userCounts SMALLINT UNSIGNED)BEGINDELETE FROM imooc_goddess WHERE age = p_age;SELECT ROW_COUNT() INTO deleteUSELECT COUNT(id) FROM imooc_goddess INTO userCEND5 自定义函数用户自定义函数(user-defined function,UDP)是一种对MySQL 扩展的途径,其用法与内置函数相同。5.1 创建自定义函数模板CREATE FUNCTION function_nameRETURNS{STRING|INTEGER|REAL|DECIMAL}routine_body关于函数体
函数体由合法的SQL语句构成
函数体可以是简单的SELECT或INSERT语句
函数体如果为复合结构则使用 BEGIN….END 语句
复合结构可以包含声明,循环,控制结构5.2 自定义函数的创建和调用1 自定义不带参数的函数CREATE FUNCTION f1() RETURNS VARCHAR(30)RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日:%H时:%i分:%s秒');SELECT f1();在 java 项目上调用函数(函数有返回值)时CallableStatement cs = conn.prepareCall("{?= call f1()}");2 自定义两个参数的函数输入两个值,计算其平均值。CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)RETURNS FLOAT(10,2) UNSIGNEDRETURN (num1+num2)/2;3 创建具有复合机构函数体的函数插入一条新数据,user_name,返回该行的id。CREATE FUNCTION adduser(username VARCHAR(20))RETURNS INT UNSIGNEDBEGININSERT
imooc_goddess(user_name) VALUES (username);return LAST_INSERT_ID();END6 通过 Navicat 查看存储过程和函数的创建语句在 Navicat 中点开函数栏,选择你要查看的函数,右击选择对象信息。选择DDL栏(数据定义语言)CREATE DEFINER=`root`@`localhost` PROCEDURE `selectAll`()BEGINSELECT * FROM imooc_goddess;END语句中的 DEFINER=`root`@`localhost`是数据库自己默认添加的。复制数据定义语言创建过程时-发生错误当我想直接复制数据定义语言,更改一个名称创建另一个存储过程时,总是创建不成功。1、更改名称(Error)CREATE DEFINER=`root`@`localhost` PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;END2、修改DEFINER(下面的语句都是不能成功创建)CREATE DEFINER={'root`@`localhost`} PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER={'root`@`%`} PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER={root|localhost} PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER={root} PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER=root PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER=`CURRENT_USER`() PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;ENDCREATE DEFINER=CURRENT_USER PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;END3、删除DEFINER删除DEFINER,可以创建成功CREATE
PROCEDURE `myselectAll`()BEGINSELECT * FROM imooc_goddess;END然而创建函数时却可以带 DEFINER下面的语句可以创建成功CREATE DEFINER=`root`@`localhost` FUNCTION `f2`(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS float(10,2) unsignedRETURN (num1+num2)/2复制数据定义语言,创建存储过程要删除DEFINER。 .10:127 存储过程与自定义函数的区别存储过程实现的功能要复杂一些,而函数的的针对性更强存储的过程可以返回多个值,函数只能有一个返回值存储过程一般独立的执行,而函数可以作为其他 SQL语句的组成部分来实现。过程 通俗易懂的说法:它只是将其中的程序执行一遍函数 通俗易懂的说法:它不但将其中的程序执行一遍,还返回一个值
最新教程周点击榜
微信扫一扫2010年6月 PHP大版内专家分月排行榜第二
2010年8月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。966,690 二月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
Entity Framework 6 Alpha 3为Code First提供对存储过程支持,并提供连接恢复功能
Entity Framework 6 Alpha 3为Code First提供对存储过程支持,并提供连接恢复功能
日. 估计阅读时间:
不到一分钟
Author Contacted
相关厂商内容
相关赞助商
QCon北京-18日,北京&国家会议中心,
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。取汉字拼音首字母的存储过程
取汉字拼音首字母的存储过程,取汉字拼音首字母的存储过程
& Create& function fun_getPY &( &&& @str nvarchar(4000) &) returns nvarchar(4000) as begin & declare @word nchar(1),@PY nvarchar(4000) & set @PY='' & while len(@str)0 & begin &&& set @word=left(@str,1) &&& --如果非汉字字符,返回原字符 &&& set @PY=@PY+(case when unicode(@word) between 19968 and
&&&&&&&&&&&&&& then (& &&&&&&&&&&&&&&&&&&&&&&&&&&& select top 1 PY& &&&&&&&&&&&&&&&&&&&&&&&&&&& from& &&&&&&&&&&&&&&&&&&&&&&&&&&& (& &&&&&&&&&&&&&&&&&&&&&&&&&&&& select 'A' as PY,N'驁' as word &&&&&&&&&&&&&&&&&&&&&&&&&&&& union all select 'B',N'簿' &&&&&&&&&&&&&&&&&&&&&&&&&&&& union all select 'C',N'錯' &&&&&&&&&&&&&&&&&&&& union all select 'D',N'鵽' &&&&&&&&&&&&&&&&&&&& union all select 'E',N'樲' &&&&&&&&&&&&&&&&&&&& union all select 'F',N'鰒' &&&&&&&&&&&&&&&&&&&& union all select 'G',N'腂' &&&&&&&&&&&&&&&&&&&& union all select 'H',N'夻' &&&&&&&&&&&&&&&&&&&& union all select 'J',N'攈' &&&&&&&&&&&&&&&&&&&& union all select 'K',N'穒' &&&&&&&&&&&&&&&&&&&& union all select 'L',N'鱳' &&&&&&&&&&&&&&&&&&&& union all select 'M',N'旀' &&&&&&&&&&&&&&&&&&&& union all select 'N',N'桛' &&&&&&&&&&&&&&&&&&&& union all select 'O',N'漚' &&&&&&&&&&&&&&&&&&&& union all select 'P',N'曝' &&&&&&&&&&&&&&&&&&&& union all select 'Q',N'囕' &&&&&&&&&&&&&&&&&&&& union all select 'R',N'鶸' &&&&&&&&&&&&&&&&&&&& union all select 'S',N'蜶' &&&&&&&nbsp
来源:/n/9469.html
热门搜索:
外景花朵清新日系色调 PS调色教程
PS美女肖像照片 靓肤技巧教程
怎么关闭QQ宠物 QQ宠物如何关闭和卸载方法
如何在WPS文字里面插入对象文件
您可能会发现,经常看到在短视频有人在表演的时候说一些鼓励的话,然后就是双击666,听的您或许摸不清头脑,我就在这里为您解答一下,请给我点赞,让我解答更加有动力。
您是否熟悉我们生活的城市是怎么命名而来的呢?中国城市的命名可是有很深的文化底蕴和历史背景的,你都知道么?我从网上搜集了大量的城市名来源,让您好好的涨涨知识,您准备好了吗?
对于爱美人士来说,美白护肤是不分季节的,即使在冬季,依然需要做好皮肤护理工作。饮食调理是护肤的一项重要措施,那么冬天美白吃什么水果呢?接下来就和我一起来看看了解一下冬季美白吃什么水果好!
产妇顺产以后多久可以洗头发?有很多产妇为了防止自己受寒所以在产后不让自己洗头发,但是又特别难受,这篇文章讲述了产妇顺产以后多长时间可以洗头发,通过这篇文章了解产妇顺产以后多久可以洗头发吧。
阴阳师是现在相当火热的一款手游,最近阴阳师又有了新的更新,玩家可以通过挑战副本来获取妖刀姬樱雨刀舞皮肤。可是的很多人不知道阴阳师妖刀姬副本阵容是怎样的,下面就给大家来详细介绍吧。
阴阳师是现在很火热的一款手机游戏,这款游戏一直在更新完善,受到很多人的追捧,就在最近阴阳师又推出了小鹿男,小鹿男作为SSR式神,很多人对它还不是很了解,下面就给大家来介绍阴阳师小鹿男御魂以及阵容搭配吧。
我们在玩阴阳师完成悬赏任务的时候,都会要求玩家找到各种式神的位置,可是很多人不知道阴阳师跳跳哥哥在哪里刷、哪里多,下面就给大家来详细介绍吧,希望对大家玩游戏有所帮助。
京津冀及周边地区出现持续雾霾天气,很是让孕妈妈们担心。持续的雾霾天气对孕妇产生了很大的影响,那么雾霾天气对孕妇危害有多大?雾霾天气孕妇怎么办?下面的文章详细介绍 了雾霾天气对孕妇的危害,一起来看看吧。
我们知道宝宝刚刚出生的时候口腔里是没有牙齿的,一般孩子在四个月以后慢慢开始出牙,每个孩子的体质不一样,所以出牙的时间也是有所差异的,宝宝出牙的时候身体会出现一些症状,家长们要及时的护理好,下面一起来看看宝宝长牙的症状有哪些。
肚子上的赘肉看上去让人烦恼,尤其是对于想穿裙子的女生来说更是一件郁闷的事情。现在减肥的方法有很多,但是很多人并不知道专门瘦肚子的方法。那么,如何瘦肚子呢?下面就给大家介绍几种减肚子的方法吧。

我要回帖

更多关于 jdbc调用存储过程 的文章

 

随机推荐