`

oracle写一个函数,参数是一个ID串,返回名称串

阅读更多

 

系统有个需求 业务表中某一个字段存的 代码表的id集合,现在查询的时候要返回代码表中的文本,

所以想到写一个function 在select语句中调用,百度了下,一开始没找到,

后来在百度知道提交了一个问答, 后推荐相似问题中找到了解答方法路径:,百度知道地址,   .

由于他用的是 mssql的写法,需要修改下字段类型:参照他的写法将所查询的表,字段,都使用动态sql构造,写法如下:

 

CREATE OR REPLACE FUNCTION F_GetTableText(t_table  in VARCHAR2 , p_id  in VARCHAR2,  caption in VARCHAR2, p_id_data  in VARCHAR2) 
RETURN VARCHAR2 AS
  TYPE   refcursor IS REF CURSOR;
  v_cursor  REFCURSOR;
  v_name   VARCHAR2(10);
  v_result   VARCHAR2(1000);
  v_id_dada  VARCHAR2(1000);
  v_SQL  VARCHAR2(1000);
BEGIN
  --1 传入的where in 条件需要处理成有效的   'a,b'  ---->转换-->     'a','b'
  v_id_dada := REPLACE(p_id_data, ',', ''',''');
  v_id_dada :=  '''' || v_id_dada ||  '''';
  v_result := '';
  
  --生成 动态sql  类似   select catption from table where id in('','');
    v_SQL := 'SELECT '||caption||' FROM '||t_table||' WHERE '||p_id||' IN (' || v_id_dada || ')';

  -- 打开游标.
  OPEN v_cursor FOR v_SQL;
  LOOP--开始循环游标
    -- 填充数据.
    FETCH v_cursor INTO v_name;
    -- 无数据时 退出循环.
    EXIT WHEN v_cursor%NOTFOUND;
    v_result := v_result || v_name|| ',';
  END LOOP;--结束循环游标
  CLOSE v_cursor;-- 关闭游标
  --将处理结果最后拼接的 逗号去掉
  v_result := TRIM(BOTH ',' FROM  v_result);
  RETURN v_result;
END F_GetTableText;

 

 

根据根据 id查询条件 返回所查表的文本字段,

 

 

 

 

 

 

<script type="text/javascript">// <![CDATA[ var _tjlt = new Date().toDateString().replace(/\s/g, ''); document.write(unescape("%3Cscript src='http://file.chanet.com.cn/widget/wangjinlian.cgi?as_id=532997%26v="+_tjlt+".js' type='text/javascript'%3E%3C/script%3E")); document.write(unescape("%3Cscript src='http://file.chanet.com.cn/html/js/wangjinlian/wangjinlian2.js?v="+_tjlt+".js' type='text/javascript'%3E%3C/script%3E")); // ]]></script><script type="text/javascript">// <![CDATA[ try{ var _tjl = WangJinLian.__init__(); _tjl._setASID(532997); _tjl._setParam_e(); _tjl._setParam_u(''); _tjl._setType(); _tjl._setCPType(7); _tjl._run(); }catch(e){} // ]]></script>

  • 大小: 12.7 KB
  • 大小: 22.1 KB
分享到:
评论

相关推荐

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...

    Oracle9i的init.ora参数中文说明

    说明: 指定一个字符串值, 设置 TIME 数据类型的默认值, 该数据类型包含 HOUR, MINUTE 和 SECOND 这几个日期时间字段。 语法: TIME '09:26:50' (将值存储为 7 个字节)。 默认值: 从 NLS_TERRITORY 中获得 nls_time...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    oracle数据库经典题目

    同义词是数据库对象的一个替代名,在使用同义词时,Oracle会将其翻译为对应的对象名称 B.在创建同义词时,所替代的模式对象必须存在 C.Oracle中的同义词分为公有同义词和私有同义词 D.公有同义词在数据库中所有的...

    oracle实验报告

    4)、创建一个函数,以客户号为参数,返回该客户可以获得的礼品名称。 5)、创建一个函数,以图书号为参数,统计该图书被订购的总数量。 湖南文理学院实验报告 课程名称 大型数据库技术 实验名称 五、PL/SQL触发器 ...

    Oracle8i_9i数据库基础

    §8.2.5 管理Oracle名称服务器 196 §8.3 关于上下文的使用 196 §8.3.1 设置上下文选项 196 §8.3.2 为上下文查询设置表 197 §8.3.3 优化文本索引 199 §8.4 关于维数(DIMENSION) 199 §8.4.1 CREATE DIMENSION...

    Oracle事例

    sql&gt; alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); &lt;8&gt;.alter index xay_id deallocate unused; 、查看索引 SQL&gt;select index_name,index_type,table_name from user...

    mysql数据库的基本操作语法

    外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不...

    2009达内SQL学习笔记

    加入注释是一个使用函数的好习惯。 大多数SQL实现支持以下类型的函数: 文本处理, 算术运算, 日期和时间, 数值处理。 Null:空值 空值当成无穷大处理,所有空值参与的运算皆为空。 空值与空值并不相等,因为...

    jpivot学习总结.doc

    formatter 该属性定义了 Member.getCaption() 方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。 3.6. Join 对于一个 Hierarchy 来说,有两种...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅...

    JAVA面试题最全集

    写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字...

    经典全面的SQL语句大全

     UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...

    数据库操作语句大全(sql)

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...

    SQL语法大全

    这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

    PL/SQL 基础.doc

    返回一个基于数据库定义的类型 DECLARE v_emp s_emp%ROWTYPE; /*s_emp为表的名字*/ 注:与RECORD类型中定一个record相比,一步就完成, 而RECORD类型中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;...

    SQL培训第一期

    当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值;如果表之间有匹配行,则整个结果集行包含基表的数据值。 1.6.4.2 语法 select A.*, B.* from student_A A full outer join student_B B on A.Uuid...

Global site tag (gtag.js) - Google Analytics