我是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) 我想知道如何从另一个存储过程更改一个存储过程。我创建了一个名为 的存储过程dbo.change,在该过程中我想更改其他需要更改的存储过程。
但目前我使用的alter procedure是,当编译更改程序时,它在更改时失败。有没有办法做到这一点?
我有一个存储过程,在客户端使用系统时被删除,并且他们无权访问数据库。所以他们无法手动删除它
我看到很多人说这可能是缺少GObeforeIF EXISTS... DROP PROC语句,但是这个过程并没有在我们运行脚本更新数据库的那一刻消失,而是在用户使用系统时被删除。
DROPC# 代码中没有。所以我不知道发生了什么事。什么可能会掉落它?
我有一个存储过程,可以使用 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属于导入一部分的所有字段单独执行操作?
我有问题动态调用存储过程
\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 || ' ' );\nRun 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;\nRun Code Online (Sandbox Code Playgroud)\n\n它不是那样工作的。我如何使动态变量绑定,因为我调用了很多过程,并且该过程具有不同的输入和输出参数。\n我希望你能理解我遇到的问题。我该如何解决这个问题,谢谢
\n我有像这样的存储过程
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。
提前致谢。
我有一个带有 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)
仅当我使用静态值时它才有效。如何使用变量作为参数?
是否可以授予用户执行存储过程的权限,但阻止他运行其他查询,即使他键入完全相同的存储过程?
基本上,我在这里想要实现的是防止用户查看视图中的所有行(从 View1 中选择所有行),但他只能通过存储过程选择具有“where”条件的一行。
我有一个 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) 我有一个存储过程,可以删除超过特定日期的所有数据。但我想添加该功能,以便它一次只删除 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)