oracle将sql语句写成存储过程

想要把原sql语句写成存储过程,这样以后就直接调用存储过程来执行这一段语句了
求大神帮忙看看我写的是否正确,谢谢
原sql语句:
TRUNCATE TABLE tab1;
INSERT tab1
SELECT s.storecode,s.category,nvl(curr.vol,0)/s.avg_vol - 1 AS growth
FROM
(
SELECT periodcode,storecode,CATEGORY,vol FROM tab2 WHERE periodcode = &periodcode) curr,
(SELECT storecode,category,AVG(vol) avg_vol FROM tab2

GROUP BY storecode,CATEGORY HAVING AVG(vol) > 0) s
WHERE curr.storecode(+) = aveg.storecode
AND curr.category(+) = s.category

打包为存储过程:
create or replace procedure p_tab1
AS
BEGIN
TRUNCATE TABLE tab1;
INSERT tab1
SELECT s.storecode,s.category,nvl(curr.vol,0)/s.avg_vol - 1 AS growth
FROM
(
SELECT periodcode,storecode,CATEGORY,vol FROM tab2 WHERE periodcode = &periodcode) curr,
(SELECT storecode,category,AVG(vol) avg_vol FROM tab2

GROUP BY storecode,CATEGORY HAVING AVG(vol) > 0) s
WHERE curr.storecode(+) = aveg.storecode
AND curr.category(+) = s.category

COMMIT;
END;

2个回答

不太明白你的问题,你是要实现什么功能

shihengzhen101
AlbertS 回复sinat_36169916: 如果两个sql没有关系,直接写在一起就行,把两个SQL写在BEGIN和END之间就好
接近 4 年之前 回复
sinat_36169916
sinat_36169916 回复AlbertS: 恩呢,谢谢了,我在请问下,如果是两个sql语句,同时写为一个存储过程,要怎么写呢?
接近 4 年之前 回复
shihengzhen101
AlbertS 你先试试吧,我的电脑上没有oracle,只有mysql,一般sql只可以正常执行的,直接写到存储过程的定义中就行
接近 4 年之前 回复
sinat_36169916
sinat_36169916 回复AlbertS: 我还没有去测试,就想问问我这样子写的存储过程有什么问题吗?
接近 4 年之前 回复
shihengzhen101
AlbertS 回复sinat_36169916: 你不是已经写了吗?出现问题了?
接近 4 年之前 回复
sinat_36169916
sinat_36169916 想要把原sql语句写成存储过程,这样以后就直接调用存储过程来执行这一段语句了
接近 4 年之前 回复

你那条truncate语句是ddl语句,不能直接那么写.
改成

execute immediate 'TRUNCATE TABLE tab1';

shihengzhen101
AlbertS 我怎么感觉可以呢,只不过我用的mysql
接近 4 年之前 回复
sinat_36169916
sinat_36169916 请问下,其他的还有什么错误吗?
接近 4 年之前 回复
sinat_36169916
sinat_36169916 好的,谢谢了
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
oracle存储过程中如何执行动态SQL语句

有时需要在oracle存储过程中执行动态SQL语句 ,例如表名是动态的,或字段是动态的,或查询命令是动态的,可用下面的方法:set serveroutput ondeclare    n number;    sql_stmt varchar2(50);    t varchar2(20);begin    execute immediate alter session set nls_da

Oracle采用存储过程执行sql语句,将查询到的数据导出到EXCEL中

Oracle采用存储过程执行sql语句,将查询到的数据导出到EXCEL中

Sql Server与Oracle存储过程转换

在sql 向oracle 迁移过程中,最头疼的也许就是存储过程的转换了,之前利用sql/developer 将sql 数据迁移到oracle 里面去了,但是对于存储过程来说,还需要进行大量的后续更改,下面就介绍一个sql 中的一个update 语句是如何转向 oracle的 例子: Sql: declare @locatidnext char(11),  @sphwcount int, @

存储过程中将sql语句结果赋值给变量

<br />create  procedure procname<br />AS<br />declare @recount int<br />select @recount=count(id) from school<br />--最关键在这句<br />select @recount=count(id) from school<br />select @recount=select count(id) from school -- 错误:这里就不再需要select了<br />set @recount=

存储过程中拼接SQL语句

很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了。具体看如下演示代码:   代码: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Au

Oracle执行参数化SQL语句和存储过程

using System;using System.Collections.Generic;using System.Text;using System.Data.OracleClient;using System.Data;namespace OracleOpDemo{    class Program    {        private st

ORACLE 存储过程打印SQL

DBMS_OUTPUT.put_line(v_sql);

Oracle中sql语句查看存储过程内容

如果没有plsql工具,可以用sql语句实现查看某一个存储过程的内容 select text from user_source where name=upper('swap_drb') order by line;

oracle用存储过程 进行行转列(执行动态SQL语句)

---------------------------------------------------------------建表 ----------------判断student表是否存在 declare num number; --声明 参数num 类型number begin --开始 select count(1) into num from user_tables

oracle 存储过程执行可输入sql语句并返回结果集

1.建立测试表: create table AAA (   aa NVARCHAR2(100),   bb NVARCHAR2(100),   cc NVARCHAR2(100),   dd NVARCHAR2(100) ) 并导入测试数据insert into aaa values('1','1','1','1'); 2.测试可行性: DECLARE        v_

Oracle 存储过程及函数中游标+动态的sql处理

我们在实际的项目开发过程中,经常会遇到类似的情况:要求在不同的数据库表分块中,查询某些字段的数据信息并按照字符串的方式显示出来,如何解呢?         游标+动态sql的方式无疑是最好的解答;首先根据需求动态地建立sql语句,其次将执行的结果存储在游标当中,采用游标循环读取数据的方式获取数据,并以字符串打包返回;         上代码,大家可以直接复用(存储过程及函数中,参数不能定义长度

在Oracle中不通过存储过程一次执行多条SQL语句Oracle PL/SQL

  PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL/SQL程序。  PL/SQL的优点  从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便

oracle 存储过程以及plsql语句块

1、 PLSQL语法 1.1、程序结构     PL/SQL程序都是以块(block)为基本单位。整个PL/SQL块分三部分:声明部分(用declare开头)、执行部分(以 begin开头)和异常处理部分(以exception开头)。其中执行部分是必须的,其他两个部分可选。无论PL/SQL程序段的代码量有多大,其基本结构就是由这三部分组成。而且每条语句均由分号隔开。 /*

pl/sql developer中用execute调用存储过程弹出‘无效的sql语句’解决方法

转自:http://www.myexception.cn/oracle-management/267605.html——解决方案——————–1、在sql的执行窗口中只能这样调用”call OUT_TIME(); “,这样执行就是把”call OUT_TIME(); “当成一个sql语句,而exec OUT_TIME();不是一个sql语句,是一个执行体,执行体调用必须在命令窗口,把这句话当成一个整

Oracle中查询有哪些存储过程的sql语句

select object_name,object_type,status from user_objects where OBJECT_TYPE='PROCEDURE';

[PL/SQL] oracle sql语句 存储过程执行慢,单独执行快

1、执行计划情况 当存储过程挂住的时候,看看V$SESSION里面的 SQL_ID, SQL_CHILD_NUMBER 再根据这两个信息用DBMS_XPLAN.DISPLAY_CURSOR把计划拿出来看看。 2、锁表情况 Oracle: select  ao.owner,ao.object_name,lo.LOCKED_MODE,lo.OS_USE

oralce存储过程拼接sql字符串,并执行sql字符串给变量赋值

之前写存储过程,用到的sql都是相对固定的,最多就是往sql里传几个值。最近遇到需要在存储过程里面动态拼接sql。 其实挺简单,先定义sql_str变量,然后给其赋一个sql字符串的值: sql_str := 'select count(*)  from amc_fwsp_sap_voucher_v t                where t.usnam = '''||userno||

sql存储过程,语句拼接,使用游标

DECLARE @paramNameCh  NVARCHAR(50) DECLARE    @paramFoid  NVARCHAR(50) SET @paramNameCh = '张三,李四,' SET @paramFoid = '441112197702157913,140107205632126715,' DECLARE @sql VARCHAR(8000) --临时存放

存储过程中执行拼接的字符串sql

exec (sqlstr)

SQL是写在程序里还是存储过程中好?

SQL是写在程序里还是存储过程中好? 1,方便性     如果SQL更改返回的字段不改变时,程序可以不用改,但是这个谁说的定返回的东西不变,所以就后续维护,把SQL写在程序中对于维护是更方便些的。 2,运行速度    把SQL写在程序中,就得编译之后才能正在数据库中执行SQL,如果运用了ORM,如Java中使用Hibernate的HQL时得根据对象-关系映射文件中的映射信息,    把H

oracle 存储过程中执行 update 很慢

如题,造成这个现象可能的原因 是表被锁了 执行下列sql语句 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.obj

实现将存储过程作为inser into的数据源,插入临时表

1、引言         今天项目制作报表需要实现一个功能,将执行一个存储过程后的数据表,作为数据源,插入到一张临时表里。由于这个临时表知识系统自动生成的字符串,并没有在数据库(SQL Server)定义,所以,做出各种尝试,均告失败。 2、两种T-SQL语法      1、select...into...from      2、insert into ... select

oracle 存储过程循环执行update语句

select column1 from table1 ;对column1进行update操作。由于update时,需要对column1进行特殊处理。如果是java程序里,可以先for循环,然后分别update。请问在存储过程里如何实现? 请写一个较为完成的存储过程。我会适当再加分的。谢谢! 2012-06-28 13:43 提问者采纳其实二楼写的最简单,但对于新手,最好别那么

SqlServer存储过程转换成Oracle储存过程语法常见问题

1. top order by 转换成 rownum order by 的问题 (子查询实现)同级情况下的优先处理顺序: sqlserver: 先order by 再top oracle: 先rownum 再 order by 2. 已有数据的字段类型不匹配,通过下列语句修改。 alter table css_sed rename column action to myacti

Oracle存储过程转成Sqlserver存储过程

Oracle存储过程转成Sqlserver存储过程 1.日期转换Oracle: TO_NUMBER(TO_CHAR(SYSDATE, YYYYMMDD))SqlServer:CAST(CONVERT(CHAR(8),GETDATE(), 112) AS INT)    注:其中‘YYYYMMDD’格式   对应1122.ROWID转换Oracle: ROWIDS

存储过程中动态拼接sql,拼接单引号问题

create or replace procedure mergerOrder(       v_ids in varchar2,       v_productCode in varchar2,       v_productCateCode in varchar2) is       type cur_type is ref cursor;       cur_policy cur_

如何使用plsql导出oracle数据建表语句,存储过程,视图。以及表中数据

第一:导出数据建表语句,存储过程,视图等打开plsql,如图,点击工具————导出用户对象 点击导出用户对象。如图所示: 如图勾选即可。可以选择你要导出的对象。也可以不选中,这样将会导出所有的对象。导出的文件为.sql格式。导出建表语句以及表中数据点击工具————导出表 之后进入如下图页面: 最后点击导出按钮即可。导出的文件格式为dmp、导出的内容包含建表语句,以及表中数据如何将导出

Oracle带输入、输出参数的存储过程 返回受影响的行数 SQL%ROWCOUNT

CREATE OR REPLACE PROCEDURE PROC_UPDATE_TEMP(P_DAYS IN NUMBER, --执行天数 P_ROWS OUT VARCHAR2, --返回受影响的行数

Oracle存储过程拼接in语句 & 自定义split函数

关于Oracle存储过程中拼接in语句以及自定义split函数

存储过程中:exec @sql 必须要写成 exec (@sql) 不要忘记括号

如标题

oracle 动态SQL在存储过程中的使用

1、      静态SQL和动态SQLOracle编译PL/SQL程序块分为两个种(其它SQL代码块包括存储过程也是如此):其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型;另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序

标量子查询SQL改写一则(包括WITH的改写)

在主查询返回大量结果集的情况下,标量子查询(Scalar Subquery)的性能是非常差的,而且即使使用并行也不行,这种情况一般需要根据SQL本身的逻辑进行改写,一般可以改写为外关联的方式。部分标量子查询还可以直接使用分析函数(window function)进行改写,不需要外关联。

oracle存储过程的调用(insert 语句的存储过程)

//存储过程 create or replace procedure ADDDDD(      pid in number,      pname in VARCHAR2 ) is begin INSERT INTO studentto VALUES(pid,pname); end ADDDDD; #include #include #include

Oracle 创建函数与存储过程语句积累

1. 创建一个返回字符串的函数 create or replace function get_hello_msg return varchar2 as begin return 'hello world'; end get_hello_msg; 查看函数的类型和状态 select object_name, object_type, status from user_object

存储过程里面执行SQL语句

存储过程里面执行SQL语句,看了下面的东东,懂的人自然知道用来干什么。:-)在你设计的网站用的数据库中加入下面的存储过程:drop proc xxx      ----xxx存储过程名create proc xxx( @str nvarchar(4000))with encryptionas exec sp_executesql @str         exec xxx sel

01.在PL/SQL中调用存储过程--oracle

在oracle10中写好了存储过程,代码如下:      CREATE OR REPLACE Procedure Proc_Insert   (          sName     in     varchar2,          sAge      in     int,          sExeTime  in     varchar2   )   is

MYSQL存储过程执行用字符串拼成的sql语句

MYSQL存储过程执行用字符串拼成的sql语句

pl/sql developer中用execute调用存储过程弹出‘无效的sql语句’…该怎么解决

转自:http://www.myexception.cn/oracle-management/267605.html ------解决方案-------------------- 1、在sql的执行窗口中只能这样调用"call OUT_TIME(); ",这样执行就是把”call OUT_TIME(); “当成一个sql语句,而exec OUT_TIME();不是一个sql语句,是一个执行

sqlplus 导出导入 存储过程,包体

sqlplus 导出导入 存储过程,包体; 先查看user_source 有哪些内容 select type from user_source  group by type; TYPE BODY PROCEDURE FUNCTION TYPE PACKAGE BODY PACKAGE 开始导数 set echo off ; set heading off

利用Oracle动态游标实现动态SQL循环遍历

create or replace procedure P_TEST_SQL is TYPE ref_cursor_type IS REF CURSOR; --定义一个动态游标 tablename varchar2(200) default 'ess_client'; v_sql varchar2(1000); mobile varchar2(15); usrs ref_c

SQL存储过程中SQL语句拼接

SQL存储过程中SQL语句拼接 转载自http://blog.sina.com.cn/s/blog_a525ba0201016klz.html   当作例子,看懂。    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- A

Oracle 在存储过程或函数中执行字符串sql

有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢?参考以下代码:FUNCTION CALCULATE_TARGET_SCORE (CUR_MONTH IN NVARCHAR2) RETURN NCLOB IS PRAGMA AUTONOMOUS_TRANSACTION; TVALUE_SQL VARC...

oracle查看存储过程的内容

SELECT text     FROM user_source    WHERE NAME = 'procedure_name' ORDER BY line

oracle存储过程执行动态sql

用存储过程删除表,表名后缀是日期。 使用动态sql。执行 execute immediate 命令。 参考http://database.51cto.com/art/201011/233310.htm Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。试验步骤如下: 1. DDL和DML /**

SQL Server 存储过程及Oracle SQL语句分页

SQL Server 存储过程及Oracle SQL语句分页

oracle 存储过程执行动态sql返回游标

execute immedit 执行静态sql,sql是查询语句,每次返回的列不相同可以直接用 open cursor for sql 方式返回集合

在动态SQL语句中调用存储过程

当我们碰到有一类存储名称和过程的参数上都相似时,可以使用execute immediate来动态执行这些存储过程,在这次的项目中我有一类用“P_InsertInto_”开头的存储过程,后面是表名如:P_InsertInto_AC01、P_InsertInto_AC02等等,用来给AC01、AC02........这些表插入数据的,我们就只能用execute immediate动态执行这些过程,像

使用存储过程查询数据库(sql有动态拼接)

ps:针对上一篇内容,这次给出其中问题的答案,并使用存储过程输出正确的查询结果。 一、基本知识 1. 在书写存储过程时,由外部输入的变量值在定义时不使用declare,且定义位于创建过程和AS之间,包括要从数据库取出的值也需要在此定义; 2. 在存储过程中使用的变量值,需要使用declare定义,且位于AS之后,一般的sql变量也在这里定义,在1中定义了的变量需要对应的在此处定义其副本,

在存储过程中演示使用case的例子(一)

  1. 演示case的存储过程/*当前的存储过程演示了如何在存储过程中使用case 语句.CASE 有两种格式: 1. 简单CASE 函数将某个表达式与一组简单表达式进行比较以确定结果    CASE input_expression             WHEN when_expression THEN result_expression          

oracle用存储过程导出INSERT INTO 语句

前些天看到几个朋友做导出oracle中的数据,可以用PL/SQL Devoleper的和export tables功能批量将N个表的数据导出成insert into语句,但怎样用SQL语句导出呢,只有用sql构造出来,以下是我用存储过程实现的代码create or replace package PK_EXPORT_TABLE  is  type result is ref cursor;en

相关热词 c#树形选择 c#中类图的使用方法 c# 传参 调用exe c# 怎么定义方法 c# 修改本地时间 c#前台怎么读取资源文件 c# xml转list c#实现框选截图 m*m乘法表c# c# 乘法99表
立即提问