CREATE OR REPLACE PROCEDURE
/*-------------------------------------------------
* 存储过程: pGetSpell
* 功能: 获得字符串的拼音头
* 作者: 李昊
* 参数: strString 待处理的字符串
* strResult (输出)拼音头
-------------------------------------------------*/
pGetSpell (
strString IN VARCHAR2,
strResult OUT VARCHAR2
)
AS
TYPE word_spell IS REF CURSOR;
curSpell word_spell;
intLength NUMBER;
intLoop NUMBER;
strSQL VARCHAR2(32767);
strSpell SPELL.SPELL%TYPE;
BEGIN
intLength := LENGTH(strString); -- 如果输入字符串为空,则返回空
IF intLength<=0 THEN
strResult := '';
ELSE
-- 拼写查询 SQL 语句
FOR intLoop IN 1..intLength LOOP
IF intLoop=1 THEN
strSQL := 'SELECT ' || TO_CHAR(intLoop) || ' ID,''' || SUBSTR(strString, intLoop, 1) || ''' WORD FROM DUAL';
ELSE
strSQL := strSQL || ' UNION SELECT ' || TO_CHAR(intLoop) || ' ID,''' || SUBSTR(strString, intLoop, 1) || ''' WORD FROM DUAL';
END IF;
END LOOP; strSQL := 'SELECT NVL(s.SPELL,''?'') SPELL FROM (' || strSQL || ') t,SPELL s WHERE t.WORD=s.WORD(+) ORDER BY t.ID'; -- 打开游标
OPEN curSpell FOR strSQL; LOOP
FETCH curSpell INTO strSpell; EXIT WHEN curSpell%NOTFOUND; strResult := strResult || strSpell;
END LOOP; -- 关闭游标
CLOSE curSpell;
END IF;
END;
/*-------------------------------------------------
* 存储过程: pGetSpell
* 功能: 获得字符串的拼音头
* 作者: 李昊
* 参数: strString 待处理的字符串
* strResult (输出)拼音头
-------------------------------------------------*/
pGetSpell (
strString IN VARCHAR2,
strResult OUT VARCHAR2
)
AS
TYPE word_spell IS REF CURSOR;
curSpell word_spell;
intLength NUMBER;
intLoop NUMBER;
strSQL VARCHAR2(32767);
strSpell SPELL.SPELL%TYPE;
BEGIN
intLength := LENGTH(strString); -- 如果输入字符串为空,则返回空
IF intLength<=0 THEN
strResult := '';
ELSE
-- 拼写查询 SQL 语句
FOR intLoop IN 1..intLength LOOP
IF intLoop=1 THEN
strSQL := 'SELECT ' || TO_CHAR(intLoop) || ' ID,''' || SUBSTR(strString, intLoop, 1) || ''' WORD FROM DUAL';
ELSE
strSQL := strSQL || ' UNION SELECT ' || TO_CHAR(intLoop) || ' ID,''' || SUBSTR(strString, intLoop, 1) || ''' WORD FROM DUAL';
END IF;
END LOOP; strSQL := 'SELECT NVL(s.SPELL,''?'') SPELL FROM (' || strSQL || ') t,SPELL s WHERE t.WORD=s.WORD(+) ORDER BY t.ID'; -- 打开游标
OPEN curSpell FOR strSQL; LOOP
FETCH curSpell INTO strSpell; EXIT WHEN curSpell%NOTFOUND; strResult := strResult || strSpell;
END LOOP; -- 关闭游标
CLOSE curSpell;
END IF;
END;
解决方案 »
- 分别在二张表里的数据,表之间没有主外关系,如果A 表有十条数据,B也应有十条记录,没有的置为空,如果A表有五条记录,B表有十条记录,则A表中余下的记录置为空
- 请问一下临时表的列及列类型放在数据库哪个表里面
- 帮忙找一下这个SQL 中的错误
- 请帮忙看看我的这个关于查询的存储过程语句是不是写错了?
- 列转行,SQL问题
- 如何在sql server中存储颜色格式的数据
- 请问下面的题目:
- 用SQL Server存储过程建DBF表并导出数据出现的问题(急)
- 这个问题真的没法解吗?'SQLOLEDB' 无法启动分布式事务。为什么?请高手不吝赐教!!!
- 高分求助,Delphi + SQL Server的数据库编程书籍
- oracle 存储过程转 sql server 2005存储过程
- oracle 存储过程转 sql server 2005存储过程
函数: fn_GetPinyin
描述: 汉字转拼音(无数据表版)
使用: dbo.fn_GetPinyin('中华人民共和国') = zhonghuarenmingongheguo
作者: 流香羽(改编:Tony)
博客: http://hi.baidu.com/流香羽
------------------------------------------------------------- */
http://blog.csdn.net/htl258/archive/2009/09/18/4567350.aspx