oracle可以在一个oracle function 语法中调用另一个oracle function 语法吗

Oracle中包(PACKAGE)的使用方法 - Oracle教程 - 编程入门网
Oracle中包(PACKAGE)的使用方法
包:(1)被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存。
(2)包中的任何函数或存储过程的子程序访问速度将大大加快。
(3)包由两个部分组成:包头和包体,在包头中描述变量、常量、游标、和子程序。
(4)包体由完整的子程序,游标定义组成。
CREATE OR REPLACE PACKAGE test_pkg IS
PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER);
FUNCTION ann_income(e_name VARCHAR2) RETURN NUMBER;
--定义了一个函数和一个过程
CREATE OR REPLACE PACKAGE BODY test_pkg IS
PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER)
UPDATE emp1 SET sal=newsal WHERE ename=e_
FUNCTION ann_income(e_name VARCHAR2)
RETURN NUMBER IS
annsal NUMBER;
SELECT sal*12+NVL(comm,0) INTO annsal FROM emp1
WHERE ename=e_
--实现上面的函数和过程
对包内共有元素的调用格式为:包名,元素名称。
对包内过程调用
SQL& exec test_pkg.update_sal('SCOTT',1200);
对包内函数调用
v_annsal NUMBER(7,2);
v_annsal:=test_pkg.ann_income('SCOTT');
dbms_output.put_line('年薪为:'||v_annsal);
我们可以 DROP PACKAGE 命令对不需要的包进行删除,语法如下:
DROP PACKAGE [BODY[user.]package_
作者:51cto Oracle小混子oracle中使用FUNCTION方法做String的SPLIT功能 - 小鹏的天空 - ITeye技术网站
博客分类:
& 今天在处理两个系统间数据同步问题时,遇到了数据内使用逗号间隔(如:1,2,3),同步到另一个系统是另一种格式(如:,不同的位置业务规则不一样),这时就要将逗号间隔的内容使用类似与java中String字符串的split方法拆分,但是oracle没有类似的方法,通过查询在网上搜索了一个FUNCTION,很好用。
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION fn_split(p_str
IN VARCHAR2,
p_delimiter IN VARCHAR2)
RETURN ty_str_split IS
VARCHAR2(4000);
str_split ty_str_split := ty_str_split();
:= LENGTH(p_str);
len1 := LENGTH(p_delimiter);
WHILE j & len LOOP
j := INSTR(p_str, p_delimiter, i);
IF j = 0 THEN
str := SUBSTR(p_str, i);
str_split.EXTEND;
str_split(str_split.COUNT) :=
IF i &= len THEN
str := SUBSTR(p_str, i, j - i);
:= j + len1;
str_split.EXTEND;
str_split(str_split.COUNT) :=
RETURN str_
因为是FUNCTION,在访问的时候必须写在SQL中,(刚开始还向用PROCEDURE那样直接用)
--调用以上FUNCTION的方法。
select * from table(fn_split('1,2,3'),',');
最终返回的就是去掉逗号之后的数组(和SPLIT方法一样)。
浏览: 24123 次
请教一个问题 安装并成功打开myeclipse之后 就不需要安 ...jquery 怎么function中调用另一个function
[问题点数:20分]
jquery 怎么function中调用另一个function
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。Java 程序调用Oracle Function_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Java 程序调用Oracle Function
来源:Linux社区&
作者:hzw2312
程序代码——调用Function通用方法:
package&com.boxun.crm. &&
import&java.sql.CallableS &&
import&java.sql.ResultS &&
import&java.sql.ResultSetMetaD &&
import&java.sql.SQLE &&
import&java.sql.S &&
import&java.util.ArrayL &&
import&java.util.HashM &&
import&java.util.L &&
import&java.util.M &&
import&org.hibernate.HibernateE &&
import&org.hibernate.Q &&
import&org.hibernate.S &&
import&org.hibernate.SessionF &&
import&org.hibernate.T &&
import&org.hibernate.cfg.C &&
public&class&DAOUtil&{ &&
&&&&private&static&DAOUtil&instance&=&null; &&
&&&&private&static&String&CONFIG_FILE_LOCATION&=&"/hibernate.cfg.xml"; &&
&&&&private&static&final&ThreadLocal&threadLocal&=&new&ThreadLocal(); &&
&&&&private&static&final&Configuration&cfg&=&new&Configuration(); &&
&&&&private&static&SessionFactory&sessionFactory&=&null; &&
&&&&public&synchronized&static&DAOUtil&getInstance() &&
&&&&&&&&if&(instance&==&null)&{ &&
&&&&&&&&&&&&instance&=&new&DAOUtil(); &&
&&&&&&&&&&&&try&{ &&
&&&&&&&&&&&&&&&&cfg.configure(CONFIG_FILE_LOCATION); &&
&&&&&&&&&&&&&&&&sessionFactory&=&cfg.buildSessionFactory(); &&
&&&&&&&&&&&&}&catch&(HibernateException&e)&{ &&
&&&&&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&&&&&return&&&&&&&&& &&
&&&&public&Session&getSession()&{ &&
&&&&&&&&Session&session&=&(Session)&threadLocal.get(); &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&if&((session&==&null)&||&(!session.isOpen()))&{ &&
&&&&&&&&&&&&&&&&session&=&sessionFactory.openSession(); &&
&&&&&&&&&&&&&&&&threadLocal.set(session); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&catch&(HibernateException&e)&{ &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&void&closeSession()&{ &&
&&&&&&&&Session&session&=&(Session)&threadLocal.get(); &&
&&&&&&&&threadLocal.set(null); &&
&&&&&&&&if&((session&!=&null)&&&&(session.isOpen()))&{ &&
&&&&&&&&&&&&session.flush(); &&
&&&&&&&&&&&&session.close(); &&
&&&&&&&&} &&
&&&&private&String&getSqlStr(String&fname,&int&size)&{ &&
&&&&&&&&StringBuffer&sql&=&new&StringBuffer(); &&
&&&&&&&&&&
&&&&&&&&sql.append("{&?&=&call&"); &&
&&&&&&&&sql.append(fname); &&
&&&&&&&&sql.append("("); &&
&&&&&&&&for&(int&i&=&0;&i&&&&i++)&{ &&
&&&&&&&&&&&&sql.append("?"); &&
&&&&&&&&&&&&if&(i&&&size&-&1)&{ &&
&&&&&&&&&&&&&&&&sql.append(","); &&
&&&&&&&&&&&&} &&
&&&&&&&&} &&
&&&&&&&&sql.append(")&}"); &&
&&&&&&&&return&sql.toString(); &&
&&&&private&String&formatSqlStr(String&sql,&ArrayList&params)&{ &&
&&&&&&&&if&((params&==&null)&||&(params.size()&==&0)) &&
&&&&&&&&&&&&return& &&
&&&&&&&&for&(int&i&=&0;&i&&&params.size();&i++)&{ &&
&&&&&&&&&&&&sql&=&sql.replaceFirst("\\?",&String.valueOf(params.get(i))); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&@SuppressWarnings("deprecation") &&
&&&&public&int&executeByFun(Session&session,&String&fname,&List&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&String&sql&=&getSqlStr(fname,&params.size()); &&
&&&&&&&&int&rval&=&-<FONT color=#c; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&CallableStatement&call&=&session.connection().prepareCall(sql); &&
&&&&&&&&&&&&&&&&call.registerOutParameter(1,&4); &&
&&&&&&&&&&&&&&&&int&i&=&0; &&
&&&&&&&&&&&&&&&&for&(int&j&=&2;&i&&&params.size();&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&call.setObject(j,&params.get(i)); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&if&(!call.execute())&{ &&
&&&&&&&&&&&&&&&&&&&&rval&=&call.getInt(1); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&call.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&catch&(Exception&ex)&{ &&
&&&&&&&&&&&&ex.printStackTrace(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&int&executeByFun(String&fname,&List&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&String&sql&=&getSqlStr(fname,&params.size()); &&
&&&&&&&&int&rval&=&-<FONT color=#c; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&CallableStatement&call&=&session.connection().prepareCall(sql); &&
&&&&&&&&&&&&&&&&call.registerOutParameter(1,&4); &&
&&&&&&&&&&&&&&&&int&i&=&0; &&
&&&&&&&&&&&&&&&&for&(int&j&=&2;&i&&&params.size();&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&call.setObject(j,&params.get(i)); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&if&(!call.execute())&{ &&
&&&&&&&&&&&&&&&&&&&&rval&=&call.getInt(1); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&call.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&double&executeByFunDouble(String&fname,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&String&sql&=&getSqlStr(fname,&params.size()); &&
&&&&&&&&double&rval&=&-<FONT color=#c.0D; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&CallableStatement&call&=&session.connection().prepareCall(sql); &&
&&&&&&&&&&&&&&&&call.registerOutParameter(1,&8); &&
&&&&&&&&&&&&&&&&int&i&=&0; &&
&&&&&&&&&&&&&&&&for&(int&j&=&2;&i&&&params.size();&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&call.setObject(j,&params.get(i)); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&if&(!call.execute())&{ &&
&&&&&&&&&&&&&&&&&&&&rval&=&call.getDouble(1); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&call.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&int&executeBySql(String&sql,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&Transaction&tran&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&Query&query&=&session.createSQLQuery(sql); &&
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&params.size();&i++) &&
&&&&&&&&&&&&&&&&&&&&query.setParameter(i,&params.get(i)); &&
&&&&&&&&&&&&&&&&tran&=&session.beginTransaction(); &&
&&&&&&&&&&&&&&&&int&rval&=&query.executeUpdate(); &&
&&&&&&&&&&&&&&&&mit(); &&
&&&&&&&&&&&&&&&&return&rval&&&0&?&0&:&-<FONT color=#c; &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return&-<FONT color=#c; &&
&&&&public&double&executeBySqlDouble(String&sql,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&Transaction&tran&=&null; &&
&&&&&&&&double&rval&=&0.0D; &&
&&&&&&&&List&list&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&Query&query&=&session.createSQLQuery(sql); &&
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&params.size();&i++) &&
&&&&&&&&&&&&&&&&&&&&query.setParameter(i,&params.get(i)); &&
&&&&&&&&&&&&&&&&tran&=&session.beginTransaction(); &&
&&&&&&&&&&&&&&&&list&=&query.list(); &&
&&&&&&&&&&&&&&&&if&(list&!=&null&&&&list.size()&&&0)&{ &&
&&&&&&&&&&&&&&&&&&&&rval&=&Double.parseDouble(list.get(0)==null&?&<FONT color=#c&+&""&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&:&list.get(0)&+&""); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&mit(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&List&getResultByFun(String&fname,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&String&sql&=&getSqlStr(fname,&params.size()); &&
&&&&&&&&List&result&=&null; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&System.out.println(session.connection().prepareCall(sql)); &&
&&&&&&&&&&&&&&&&CallableStatement&call&=&session.connection().prepareCall(sql); &&
&&&&&&&&&&&&&&&&call.registerOutParameter(1,&-10); &&
&&&&&&&&&&&&&&&&for&(int&i&=&0,&j&=&2;&i&&&params.size();&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&call.setObject(j,&params.get(i)); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&if&(!call.execute())&{ &&
&&&&&&&&&&&&&&&&&&&&ResultSet&rs&=&(ResultSet)&call.getObject(1); &&
&&&&&&&&&&&&&&&&&&&&ResultSetMetaData&rsmd&=&rs.getMetaData(); &&
&&&&&&&&&&&&&&&&&&&&String[]&colname&=&new&String[rsmd.getColumnCount()]; &&
&&&&&&&&&&&&&&&&&&&&for&(int&j&=&1,&i&=&0;&i&&&colname.&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&&&&&colname[i]&=&rsmd.getColumnName(j); &&
&&&&&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&&&&&result&=&new&ArrayList(); &&
&&&&&&&&&&&&&&&&&&&&while&(rs.next())&{ &&
&&&&&&&&&&&&&&&&&&&&&&&&Map&row&=&new&HashMap(); &&
&&&&&&&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&colname.&i++) &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&row.put(colname[i],&rs.getObject(colname[i])); &&
&&&&&&&&&&&&&&&&&&&&&&&&result.add(row); &&
&&&&&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&&&&&rs.close(); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&call.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&String&getResultByFunString(String&fname,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&String&sql&=&getSqlStr(fname,&params.size()); &&
&&&&&&&&String&str&=&""; &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&CallableStatement&call&=&session.connection().prepareCall(sql); &&
&&&&&&&&&&&&&&&&call.registerOutParameter(1,&12); &&
&&&&&&&&&&&&&&&&for&(int&i&=&0,&j&=&2;&i&&&params.size();&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&call.setObject(j,&params.get(i)); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&if&(!call.execute())&{ &&
&&&&&&&&&&&&&&&&&&&&str&=&String.valueOf(call.getObject(1)); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&call.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
&&&&public&List&getResultBySql(String&sql,&ArrayList&params) &&
&&&&&&&&&&&&throws&HibernateException,&SQLException&{ &&
&&&&&&&&List&result&=&null; &&
&&&&&&&&sql&=&formatSqlStr(sql,&params); &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&Session&session&=&DAOUtil.getInstance().getSession(); &&
&&&&&&&&&&&&if&(session.isConnected())&{ &&
&&&&&&&&&&&&&&&&Statement&stat&=&session.connection().createStatement(); &&
&&&&&&&&&&&&&&&&ResultSet&rs&=&stat.executeQuery(sql); &&
&&&&&&&&&&&&&&&&ResultSetMetaData&rsmd&=&rs.getMetaData(); &&
&&&&&&&&&&&&&&&&String[]&colname&=&new&String[rsmd.getColumnCount()]; &&
&&&&&&&&&&&&&&&&for&(int&j&=&1,&i&=&0;&i&&&colname.&j++)&{ &&
&&&&&&&&&&&&&&&&&&&&colname[i]&=&rsmd.getColumnName(j); &&
&&&&&&&&&&&&&&&&&&&&i++; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&result&=&new&ArrayList(); &&
&&&&&&&&&&&&&&&&while&(rs.next())&{ &&
&&&&&&&&&&&&&&&&&&&&Map&row&=&new&HashMap(); &&
&&&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&colname.&i++) &&
&&&&&&&&&&&&&&&&&&&&&&&&row.put(colname[i],&rs.getObject(colname[i])); &&
&&&&&&&&&&&&&&&&&&&&result.add(row); &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&rs.close(); &&
&&&&&&&&&&&&&&&&stat.close(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}&finally&{ &&
&&&&&&&&&&&&closeSession(); &&
&&&&&&&&} &&
&&&&&&&&return& &&
相关资讯 & & &
& (08/11/:36)
& (04/08/:32)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
g 发表于 gh您现在的位置:&&>>&&>>&&>>&正文
oracle使用package来包装存储过程或function
&&& 过程或者是function大多数开发者都应该用过,如果是过程或者function数量不多那倒是还好,如果数量比较多维护起来就麻烦了,存储过程或者function单独建名称是不允许重复的,有时还会误删引起不必要的麻烦。oracle也提供了package这种机制来处理这种问题,package和java里的那个很相似,里面既可以定义存储过程还可以定义function,package由包头和包体两部分组成。
&&& 1.包头部分,主要就是包的定义如包名,以及一些存储过程的声明等
&&& create or replace package mypackage As
&&& procedure queryteacher(fid In Integer,Type In Varchar,Name Out Varchar);
&&& 里面声明了一个存储过程,这里只是简单举例,as后面还可以声明其他东西
&&& 2.包体,这一部分应该算是包的核心,里面主要就是存储过程和function的具体实现,创建包体的时候要注意包体的名称应和包的名称一致
&&& create or replace package body mypackage
&&& Procedure queryTeacher(fid In Integer,Type In Varchar,Name Out Varchar)
&&& If Type='1' then
&&& Select Name Into Name From student Where id=
&&& Else if Type='2' Then
&&& Select Name Into Name From teacher Where id=
&&& Name:='错误';
&&& End If;
&&& End If;
&&& 下来来看下package在plsql中的位置
&&& 这样简单的做了包装以后,要维护数据库就比较方便了,如果是要放在程序里执行也很简单只需要在存储过程或者function前面加上包名即可,以mybatis为例映射文件这样写就行
&&& [html]
&&& &select id="queryTeacher" statementType="CALLABLE" parameterType="java.util.Map"&
&&& {call mypackage.queryTeacher(#{fid,mode=IN,jdbcType=INTEGER},#{type,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})}
&&& &/select&
【责编:peter】
?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]
相关产品和培训
 友情推荐链接
 认证培训
 专题推荐
 ? ? ? ? ? ? ? ? ? ?
 今日更新
?&?&?&?&?&?&?&?&?&?&
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航
技术导航:         产品导航 :  |
|  :  |}

我要回帖

更多关于 oracle function 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信