标签: stored-procedures

MYSQL如果参数为null则设置

我是MYSQL的新手,但对SQL有基本的了解,我想说的是,如果我的参数没有设置(即null),那么将其设置为JM。

下面的脚本我出了什么问题/哪里出了问题?

提前致谢

CREATE DEFINER=`james`@`%` PROCEDURE `Project_Status`(IN engineer VARCHAR (5))
BEGIN

SELECT 
    PP.pid_full,
    PP.description_small,
    PP.project_status,
    PP.est_comp_date as 'Est Comp Date',
    EP.engineer
FROM 
    project_pid pp
JOIN
    eng_project_hours EP on PP.pid_full = EP.pid_full

where engineer = ep.engineer;

IF engineer is null then update engineer = jm
set engineer = ep.engineer;
end if;

end
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

0
推荐指数
1
解决办法
1万
查看次数

从另一个过程更改存储过程

我想知道如何从另一个存储过程更改一个存储过程。我创建了一个名为 的存储过程dbo.change,在该过程中我想更改其他需要更改的存储过程。

但目前我使用的alter procedure是,当编译更改程序时,它在更改时失败。有没有办法做到这一点?

sql sql-server stored-procedures sql-server-2008

0
推荐指数
1
解决办法
2405
查看次数

SQL Server 存储过程被删除

我有一个存储过程,在客户端使用系统时被删除,并且他们无权访问数据库。所以他们无法手动删除它

我看到很多人说这可能是缺少GObeforeIF EXISTS... DROP PROC语句,但是这个过程并没有在我们运行脚本更新数据库的那一刻消失,而是在用户使用系统时被删除。

DROPC# 代码中没有。所以我不知道发生了什么事。什么可能会掉落它?

c# sql-server asp.net stored-procedures

0
推荐指数
1
解决办法
772
查看次数

oracle存储过程将csv文件导入目标表

我有一个存储过程,可以使用 UTL 函数将 CSV 数据插入到 oracle 表中。我遇到困难的部分是当我在regexp_substr插入目标表之前必须使用时。我浏览了regexp_substr各种网站,但仍然不太掌握如何将其应用到这个特定导入程序的概念。

例如,假设我们有以下几行代码:

             V_EMPNO := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1);
             V_ENAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 2);
Run Code Online (Sandbox Code Playgroud)

我的直率问题是,有人可以向我解释一下这条线的逻辑是如何工作的吗?我有一个 CSV 文件和包含 75 个字段的目标表,所以这当然只是一个样本,我知道我已经把这一部分写得很长了。我假设字符串的最后一部分只是行号,所以我不断增加它。

我的另一个问题是,我是否应该继续将所有记录定义为变量,并对regexp_substr属于导入一部分的所有字段单独执行操作?

csv oracle import plsql stored-procedures

0
推荐指数
1
解决办法
2万
查看次数

动态调用存储过程(立即执行)输出参数问题

我有问题动态调用存储过程

\n\n
    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2 '',:v_output2);  end;';\n    execute immediate v_sql\n    using  out v_output2 ;\n    dbms_output.put_line(v_output2 || ' ' );\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里 \xc4\xb1 可以调用立即执行的过程。\n但我的问题是动态绑定变量。该值来自日志表,然后我解析execute_immediate 过程

\n\n
    v_sql      := 'begin '|| p_procname ||  '(''test1'','' test2'',:v_output2);  end;';\n    v_sql1:= ||using||  'out v_output2 ' ;\n\n    execute immediate v_sql\n    v_sql1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它不是那样工作的。我如何使动态变量绑定,因为我调用了很多过程,并且该过程具有不同的输入和输出参数。\n我希望你能理解我遇到的问题。我该如何解决这个问题,谢谢

\n

oracle plsql stored-procedures execute execute-immediate

0
推荐指数
1
解决办法
1万
查看次数

如何将逗号分隔值传递给 MySql 中的存储过程?

我有像这样的存储过程

    CREATE DEFINER=`test`@`%` PROCEDURE  `test`.`get_details`(
    in p_istudid int,
    in p_icourseid int,
    in p_branchid varchar(20)
    )
    BEGIN
    select ...
    ...
    and branch.id in(p_branchid);
    END
Run Code Online (Sandbox Code Playgroud)

我想将逗号分隔值传递给第三个参数,如何传递该值?我尝试过 -

 call get_details(10,11,'20,30');
Run Code Online (Sandbox Code Playgroud)

但只显示分支 ID 为 20 的记录,而不是 30。

提前致谢。

mysql stored-procedures

0
推荐指数
1
解决办法
6136
查看次数

将变量作为参数传递给存储过程

我有一个带有 SELECT 语句和两个参数的存储过程。我想从另一个声明了变量的存储过程调用此存储过程,并使用该变量作为参数之一。

当我尝试这个时:

EXEC [dbo].[Testo] @cd_order = 23, @cd_substep = 33
Run Code Online (Sandbox Code Playgroud)

它返回一些行作为结果,但是当我尝试这样做时:

set @temp_var1 = ( Select cd_substep FROM ....Where...)

EXEC [dbo].[Testo] @cd_order = 23, @cd_substep = @temp_var1
Run Code Online (Sandbox Code Playgroud)

结果是空的。

该过程将填充一个表变量:

INSERT INTO @Var1Table EXEC [dbo].[Testo] 23, @cd_substep 
Run Code Online (Sandbox Code Playgroud)

仅当我使用静态值时它才有效。如何使用变量作为参数?

t-sql sql-server stored-procedures

0
推荐指数
1
解决办法
5947
查看次数

授予用户仅执行一个存储过程但不能运行其他查询

是否可以授予用户执行存储过程的权限,但阻止他运行其他查询,即使他键入完全相同的存储过程?

基本上,我在这里想要实现的是防止用户查看视图中的所有行(从 View1 中选择所有行),但他只能通过存储过程选择具有“where”条件的一行。

sql-server stored-procedures

0
推荐指数
1
解决办法
1819
查看次数

如何在存储过程中使用事务?

我有一个 SQL 脚本,需要将其转换为参数化存储过程。我过去只编写过简单的函数,从未编写过带参数的复杂事务查询。

非常感谢任何帮助 - 下面简化了查询。该脚本实际上可以是包含交易和一些用户输入的任何内容。

-- transaction ensures i can clean up a mess, if one happens
begin;

-- parameters for the script; currently set manually before execution
set @parent_id := 123;
set @identifier := 'someid';

-- insert some row with user-specified values
insert into users (field1, field2) values (@parent_id, @identifier);

-- get the new id
set @user_id := last_insert_id();

-- do another insert
insert into usersmeta (user_id, field1, field2) values (@user_id, 1, 2);

-- if no errors happened …
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures

0
推荐指数
1
解决办法
6192
查看次数

如何在 SQL Server 中从我的修剪存储过程中一次删除 n 行?

我有一个存储过程,可以删除超过特定日期的所有数据。但我想添加该功能,以便它一次只删除 1000 行。

我有这样的东西

USE [databaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[LogTrim]
                       (
                          @DaysToKeep             INT = 28
                          --@Blocks               INT = 1000 --??
                       )
AS
SET NOCOUNT ON
---------------------------------------------------------------------
-- Declarations
---------------------------------------------------------------------
-- Standard Variables
DECLARE
        @Error            INT
       ,@ErrorCode        INT
       ,@ExitCode         INT
       ,@ProcedureLineNbr INT
       ,@ProcedureName    VARCHAR(30)
       ,@rc               INT          
       ,@Rowcount         INT

-- Local Variables
DECLARE
         @DateToKeep       DATETIME
        ,@TimePeriodToKeep INT
        ,@DeletedRowCount  DEC
        ,@Message1         VARCHAR(60)
        ,@Message2         VARCHAR(60)
        ,@ERRPARAMETER     INT
        ,@ERRUNEXPECTED    INT

---------------------------------------------------------------------
-- Initializations
---------------------------------------------------------------------
-- Standard Variables …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures

0
推荐指数
1
解决办法
773
查看次数