主标题:如何执行函数返回的sql语句(sql创建函数返回查询结果)

副标题:如何执行函数返回的sql语句(sql创建函数返回查询结果)

发布于:10-06 13:40:00 类别:职场经验 阅读:133

当前网址:http://www.hzqyd.com/ckzx/zcjy/11997.html

如何执行函数返回的sql语句,sql创建函数返回查询结果

内容导航:

  • 函数内执行sql语句怎么写
  • 如何创建和执行返回行的 SQL 语句
  • 动态执行sql语句是否有返回值可以判断是否成功
  • 怎样优化SQL语句的执行
  • 一、函数内执行sql语句怎么写

    php中利用数组用mysql_query批量执行sql语句。参考示例如下:思路:这里采用一个数组.用explode函数,将$query语句按照”;”炸开,然后循环执行即可:$query=’deletefromecs_goods_attrwhereattr_id=11andgoods_id=22;insertintoecs_goods_attr(goods_attr_id,goods_id,attr_id,attr_value,attr_price)values(null,33,138,”胆略”,0);updateecs_goodssetgoods_number=10,shop_price=55wheregoods_id=33;’$query_e=explode(‘;’,’$query’);foreach($query_eas$k=>$v){mysql_query($query_e[$k]);}这样$query语句就被批量的执行了。

    二、如何创建和执行返回行的 SQL 语句

    注意显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。
    若要更改设置,请在“工具”菜单上选择“导入和导出设置”。
    有关更多信息,请参见 使用设置。
    使用TableAdapter 创建返回行的 SQL 语句在“数据集设计器”中打开一个数据集。
    有关更多信息,请参见如何:在数据集设计器中打开数据集。
    如果还没有 TableAdapter,请创建一个。
    有关创建 TableAdapter 的更多信息,请参见 如何:创建 TableAdapter。
    如果在 TableAdapter 中已经具有使用 SQL 语句返回行的查询,请跳转到下一过程“声明 TableAdapter 的实例并执行查询”。
    否则,请继续步骤 4 来新建返回行的查询。
    右击所需的 TableAdapter,然后使用快捷菜单添加查询。
    “TableAdapter 查询配置向导”将打开。
    保留“使用 SQL 语句”的默认值,然后单击“下一步”。
    保留“选择(返回行)”的默认值,然后单击“下一步”。
    键入SQL 语句,或借助“查询生成器”创建一条 SQL 语句,然后单击“下一步”。
    为该查询提供名称。
    完成向导;该查询即被添加到 TableAdapter。
    生成您的项目。
    声明TableAdapter 的实例并执行查询声明一个 TableAdapter 实例,该实例包含要执行的查询。
    若要使用设计时工具创建实例,请从“工具箱”拖动所需的 TableAdapter。
    (现在,项目中的组件将出现在“工具箱”中,位于与项目名称匹配的标题下。
    )如果“工具箱”中没有出现 TableAdapter,则可能需要生成您的项目。
    -或 -要在代码中创建实例,请使用您的 DataSet 和TableAdapter 的名称替换下面的代码。
    Dim tableAdapter As New ter注意TableAdapter 实际上并不在其关联数据集类内。
    每个数据集在其各自命名空间中均有一个相应的 TableAdapter 集合。
    例如,如果有一个名为 SalesDataSet 的数据集,就会有一个包含其 TableAdapter 的 SalesDataSetTableAdapters
    命名空间。
    请按照在代码中调用任何其他方法的方式调用查询。
    查询是 TableAdapter 上的一个方法。
    用您的 TableAdapter 和查询的名称替换下面的代码。
    您还需要传入查询所需的任何参数。
    根据查询是否带有参数,代码可能会类似于以下示例之一:()(Parameters)(DataTable, Parameters)声明TableAdapter
    实例并执行查询的完整代码应与以下内容类似:C#VB TableAdapter tableAdapter = new TableAdapter(); y(,
    “Seattle”);

    三、动态执行sql语句是否有返回值可以判断是否成功

    返回执行的上一个 Transact-SQL 语句的错误号。

    Transact-SQL 语法约定

    语法

    @@ERROR

    返回类型
    integer

    备注
    如果前一个 Transact-SQL 语句执行没有错误,则返回 0。

    如果前一个语句遇到错误,则返回错误号。如果错误是 目录视图中的错误之一,则 @@ERROR 将包含 _id 列中表示该错误的值。可以在 中查看与
    @@ERROR 错误号相关的文本信息。

    由于 @@ERROR 在每一条语句执行后被清除并且重置,因此应在语句验证后立即查看它,或将其保存到一个局部变量中以备以后查看。

    使用 TRY…CATCH 构造来处理错误。TRY…CATCH 构造也支持其他返回的错误信息多于 @@ERROR
    的系统函数(ERROR_LINE、ERROR_MESSAGE、ERROR_PROCEDURE、ERROR_SEVERITY 和
    ERROR_STATE)。TRY…CATCH 也支持 ERROR_NUMBER
    函数,但不限制该函数在语句产生错误后立即在语句中返回错误号。有关详细信息,请参阅 TRY…CATCH (Transact-SQL)。

    示例
    A. 用 @@ERROR 检测一个特定错误
    以下示例用 @@ERROR 在 UPDATE 语句中检测约束检查冲突(错误 #547)。

    复制代码
    USE AdventureWorks;
    GO
    UPDATE ayHistory
    SET PayFrequency = 4
    WHERE EmployeeID = 1;
    IF @@ERROR = 547
    PRINT N’A check constraint violation occurred.’;
    GO

    B. 用 @@ERROR 有条件地退出一个过程
    在此示例中,IF…ELSE 语句在存储过程中的 INSERT 语句后检测 @@ERROR。@@ERROR
    变量的值将决定发送给调用程序的返回代码,以指示此过程的成功与失败。

    复制代码
    USE AdventureWorks;
    GO
    — Drop the procedure if it already exists.
    IF OBJECT_ID(N’_DeleteCandidate’, N’P’) IS NOT NULL
    DROP PROCEDURE _DeleteCandidate;
    GO
    — Create the procedure.
    CREATE PROCEDURE _DeleteCandidate
    (
    @CandidateID INT
    )
    AS
    — Execute the DELETE statement.
    DELETE FROM ate
    WHERE JobCandidateID = @CandidateID;
    — Test the error value.
    IF @@ERROR <> 0
    BEGIN
    — Return 99 to the calling program to indicate failure.
    PRINT N’An error occurred deleting the candidate information.’;
    RETURN 99;
    END
    ELSE
    BEGIN
    — Return 0 to the calling program to indicate success.
    PRINT N’The job candidate has been deleted.’;
    RETURN 0;
    END;
    GO

    C. 与 @@ROWCOUNT 一同使用 @@ERROR
    下面的示例用 @@ERROR 和 @@ROWCOUNT 验证一条 UPDATE 语句的操作。为任何可能出现的错误而检验 @@ERROR 的值,而用
    @@ROWCOUNT 保证更新已成功应用于表中的某行。

    四、怎样优化SQL语句的执行

    答:环境:oracle817+linux+阵列柜swd_billdetail表5000万条数据SUPER_USER表2800条数据连接列上都有索引,而且super_user中的一条对应于swd_billdetail表中的很多条记录表与索引都做了分析。实际应用的查询为:select,classfromswd_billdetailB,SUPER_USERAwhere=;这样在分析时导致查询出的数据过多,不方便,所以用count(||_class)来代替,而且count(||_class)操作本身并不占用过多的时间,所以可以接受此种替代。利用索引查询出SWD_BILLDETAIL表中所有记录的方法SQL>selectcount(id)fromSWD_BILLDETAIL;COUNT(ID)———-Elapsed:00:02:166.00ExecutionPlan———————————————————-0SELECTSTATEMENTOptimizer=CHOOSE(Card=1)10SORT(AGGREGATE)21INDEX(FASTFULLSCAN)OF‘SYS‘(UNIQUE)()Statistics———————————————————-0recursivecalls1952dbblockconsistentphysicalreads1004redosize295bytessentviaSQLNettoclient421bytesreceivedviaSQLNetfromclient2SQLNetroundtripsto/fromclient1sorts(memory)0sorts(disk)1rowsprocessed利用全表扫描从SWD_BILLDETAIL表中取出全部数据的方法。SQL>selectcount(user_class)fromswd_billdetail;COUNT(USER_CLASS)—————–Elapsed:00:11:703.07ExecutionPlan———————————————————-0SELECTSTATEMENTOptimizer=CHOOSE(Card=1Bytes=2)10SORT(AGGREGATE)21TABLEACCESS(FULL)OF‘SWD_BILLDETAIL‘()Statistics———————————————————-0recursivecalls8823dbblockconsistentphysicalreads0redosize303bytessentviaSQLNettoclient421bytesreceivedviaSQLNetfromclient2SQLNetroundtripsto/fromclient1sorts(memory)0sorts(disk)1rowsprocessedselectcount(||_class)fromswd_billdetailB,SUPER_USERAwhere=;EXEC_ORDERPLANLINE———————————————————————————————————————6SELECTSTATEMENTOPT_MODE:CHOOSE(,CARD=1,BYTES=21)5SORT(AGGREGATE)(COST=,CARD=1,BYTES=21)4NESTEDLOOPS(,,)1TABLEACCESS(FULL)OF‘_USER‘(COST=2,CARD=2794,)3TABLEACCESS(BYINDEXROWID)OF‘_BILLDETAIL‘(COST=39,,)2INDEX(RANGESCAN)OF‘_DETAIL_CN‘(NON-
    UNIQUE)(COST=3,,BYTES=)这个查询耗费的时间很长,需要1个多小时。运行后的信息如下:COUNT(||_CLASS)——————————Elapsed:01:107:6429.87ExecutionPlan———————————————————-0SELECTSTATEMENTOptimizer=CHOOSE(Card=1Bytes=21)10SORT(AGGREGATE)21NESTEDLOOPS()32TABLEACCESS(FULL)OF‘SUPER_USER‘(Cost=2)42TABLEACCESS(BYINDEXROWID)OF‘SWD_BILLDETAIL‘(Cost=39)54INDEX(RANGESCAN)OF‘IDX_DETAIL_CN‘(NON-
    UNIQUE)(Cost=3)Statistics———————————————————-0recursivecalls4dbblockconsistentphysicalreads0redosize316bytessentviaSQLNettoclient421bytesreceivedviaSQLNetfromclient2SQLNetroundtripsto/fromclient2sorts(memory)0sorts(disk)1rowsprocessed将语句中加入hints,让oracle的优化器使用嵌套循环,并且大表作为驱动表,生成新的执行计划:select/+ORDEREDUSE_NL(A)/count(||_class)fromswd_billdetailB,SUPER_USERAwhere=;EXEC_ORDERPLANLINE—————————————————————————————————————6SELECTSTATEMENTOPT_MODE:CHOOSE(,CARD=1,BYTES=21)5SORT(AGGREGATE)(COST=,CARD=1,BYTES=21)4NESTEDLOOPS(,,)1TABLEACCESS(FULL)OF‘_BILLDETAIL‘(,,)3TABLEACCESS(BYINDEXROWID)OF‘_USER‘(COST=2,CARD=2794,)2INDEX(RANGESCAN)OF‘_SUPER_USER_CN‘(NON-
    UNIQUE)(COST=1,CARD=2794,BYTES=)这个查询耗费的时间较短,才20分钟,性能比较好。运行后的信息如下:COUNT(||_CLASS)——————————Elapsed:00:20:1208.87ExecutionPlan———————————————————-0SELECTSTATEMENTOptimizer=CHOOSE(Card=1Bytes=21)10SORT(AGGREGATE)21NESTEDLOOPS()32TABLEACCESS(FULL)OF‘SWD_BILLDETAIL‘()42TABLEACCESS(BYINDEXROWID)OF‘SUPER_USER‘(Cost=2Card=2794)54INDEX(RANGESCAN)OF‘IDX_SUPER_USER_CN‘(NON-
    UNIQUE)(Cost=1Card=2794)Statistics———————————————————-0recursivecalls8823dbblockconsistentphysicalreads0redosize316bytessentviaSQL
    Nettoclient421bytesreceivedviaSQLNetfromclient2SQLNetroundtripsto/fromclient2sorts(memory)0sorts(disk)1rowsprocessed总结:因为上两个查询都是采用nestedloop循环,这时采用哪个表作为drivingtable就很重要。在第一个sql中,小表(SUPER_USER)作为drivingtable,符合oracle优化的建议,但是由于SWD_BILLDETAIL表中cn列的值有很多重复的,这样对于SUPER_USER中的每一行,都会在SWD_BILLDETAIL中有很多行,利用索引查询出这些行的rowid很快,但是再利用这些rowid去查询SWD_BILLDETAIL表中的user_class列的值,就比较慢了。原因是这些rowid是随机的,而且该表比较大,不可能缓存到内存,所以几乎每次按照rowid查询都需要读物理磁盘,这就是该执行计划比较慢的真正原因。从结果可以得到验证:查询出行,需要利用rowid从SWD_BILLDETAIL表中读取次,而且大部分为从硬盘上读取。反其道而行之,利用大表(SWD_BILLDETAIL)作为driving表,这样大表只需要做一次全表扫描(而且会使用多块读功能,每次物理I/O都会读取几个oracle数据块,从而一次读取很多行,加快了执行效率),对于读出的每一行,都与SUPER_USER中的行进行匹配,因为SUPER_USER表很小,所以可以全部放到内存中,这样匹配操作就极快,所以该sql执行的时间与SWD_BILLDETAIL表全表扫描的时间差不多(SWD_BILLDETAIL全表用11分钟,而此查询用20分钟)。另外:如果SWD_BILLDETAIL表中cn列的值唯一,则第一个sql执行计划执行的结果或许也会不错。如果SUPER_USER表也很大,如500万行,则第2个sql执行计划执行的结果反而又可能会差。其实,如果SUPER_USER表很小,则第2个sql语句的执行计划如果不利用SUPER_USER表的索引,查询或许会更快一些,我没有对此进行测试。所以在进行性能调整时,具体问题要具体分析,没有一个统一的标准。

    二维码

    添加微信,快速了解成人高考

    声明:由于考试政策等各方面情况的不断调整与变化,本网站所提供的考试信息仅供参考,请以权威部门公布的正式信息为准。
    本站所有内容来源于互联网。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至 514443065@qq.com举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

    标签:

    1、您目前的学历层次:

    小学及以下

    初中

    高中

    中专

    大专

    2、你接受的拿证时长:

    1年以内越快越好

    1年到2年

    2年到3年

    3年及以上

    3、你为什么提升学历:

    找工作

    考公务员

    办工作居住证

    考证书评职称

    4、您更偏向于哪种取证方式:

    全程无忧

    在家自学

    学校听课

    辅导教学

    其他

    *您的姓名:

    *手机号码:

    *报考城市:

    相关文章

    • dede会员中心如何调用评论(会员中心登录)

      dede会员中心如何调用评论(会员中心登录)

      「dede会员中心仿制」dede会员中心如何调用评论,会员中心登录内容导航:dede怎么调用留言板腾讯嬗变削藩后剑指何方会员中心模板详细页如何调用自定义字段dede 评论怎么调用一、dede怎么调用留言板有三种方法可以实现调用,分别如下: 第一...

    • 如何提升网站加载速度(怎么提高网站下载速度)

      如何提升网站加载速度(怎么提高网站下载速度)

      「提升网页加载速度」如何提升网站加载速度,怎么提高网站下载速度内容导航:如何提升网站的打开速度对于加快网页的加载速度都有哪些优化的方法网站建设过程中是如何提高网站加载速度如何通过预加载器提升网页加载速度 一、如何提升网站的...

    • 「阿里云独立密码是什么意思」阿里云盘密码登录怎么设置密码

      「阿里云独立密码是什么意思」阿里云盘密码登录怎么设置密码

      「阿里云的密码」阿里云独立密码是什么意思,阿里云账号密码内容导航:阿里云账号登陆密码和服务器的密码是一样的吗什么是独立密码阿里云盘密码登录怎么设置密码知道 阿里云的 动态域名账号、密码是什么意思吗一、阿里云账号登陆密码...

    • 3张照片如何排版好看(五张照片怎么排版好看)

      3张照片如何排版好看(五张照片怎么排版好看)

      「3张照片的排版」3张照片如何排版好看,五张照片怎么排版好看内容导航:三张照片怎么排版好看怎样把三张图片放在一张A4纸上排版的好看了3张7寸8张8寸照片墙怎么排书报怎样排版才好看一、三张照片怎么排版好看三张照片你可以把它合成一...

    • 个人如何网站备案(个人网址备案)

      个人如何网站备案(个人网址备案)

      「个人网站备案从哪里备案」个人如何网站备案,个人网址备案内容导航:个人服务器搭建网站如何进行备案个人网站怎么备案网站备案什么样的网站可以备案一、个人服务器搭建网站如何进行备案备案时需要提交网站和域名信息,对应管局会对您的网站和域...

    • 「企业备案有什么用途」特殊用途化妆备案怎么办理

      「企业备案有什么用途」特殊用途化妆备案怎么办理

      「特殊类化妆品备案要多久」企业备案有什么用途,备案是干什么用的内容导航:备案是什么作用进行企业投资项目备案有什么作用吗会有类似于税收优惠之类的好处企业上的ICP备案号是什么呀特殊用途化妆备案怎么办理一、备案是什么作用备案:是指向主...

    • 什么浏览器不支持js(什么浏览器不支持wav)

      什么浏览器不支持js(什么浏览器不支持wav)

      「哪个版本的浏览器不支持媒体查询」什么浏览器不支持js,什么浏览器不支持wav内容导航:IE浏览器不兼容JavaScript我的浏览器不支持JS脚本是什么意思如何解决Win10系统IE浏览器不支持js为什么我的google浏览器不能选择日期打开流程一、IE浏览器不兼容Jav...

    • 网站首页布局设计用什么(网站布局设计的步骤)

      网站首页布局设计用什么(网站布局设计的步骤)

      「网站主页布局结构」网站首页布局设计用什么,网站布局设计的步骤内容导航:网页布局设计有哪些类型网站首页设计的页面应该包括哪些内容网站首页的设计和布局怎么做网页布局都有哪种一般都用什么布局一、网页布局设计有哪些类型1、拐角型...

    • ps如何制作烟雾效果(ps怎样做出烟雾的效果)

      ps如何制作烟雾效果(ps怎样做出烟雾的效果)

      「ps如何做出烟雾特效」ps如何制作烟雾效果,ps怎样做出烟雾的效果内容导航:ps如何制作唯美的烟雾效果图ps怎样制作烟的效果photoshop如何制作这种实物与水墨结合的烟雾抽丝效果ps里怎么做烟雾效果一、ps如何制作唯美的烟雾效果图1、启动pho...

    • 如何开通个人博客(如何开通博客)

      如何开通个人博客(如何开通博客)

      「如何开通博客?」如何开通个人博客,如何开通博客内容导航:如何开通个人博客怎样开通和使用自己的博客啊如何开通我的博客如何申请一个个人博客一、如何开通个人博客具体操作步骤如下:以新浪博客为例:1、首先打开百度,点击搜索进入...

    放松一下

    是来吃饭的

    我们有同事外地出差,经销商请吃饭。席间要欲小便,经销商说对面就有洗手间,你去的话如果给门口说,我们是对面吃饭的就可以免费。我们同事为了节约两毛钱,箭步直走,理直气壮地对管厕所的说:“我是来吃饭的!”

    评论 (0)

    上一页 下一页

    我要点评

    您还未登录,无法发表评论!