- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是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
最佳答案
我不确定我是否理解您的意图。
当输入参数的值为 NULL
时,如果您想使用 'JM'
的值而不是 NULL
,一种方法获得这种行为是在过程中声明一个局部变量。
检查参数的值,并相应地设置局部变量的值;当输入参数为 null 时,将局部变量设置为字面值 'JM'
,或者当输入参数不为 null 时,将其设置为输入参数的值。然后在SQL语句中引用局部变量。
像这样:
DELIMITER $$
CREATE DEFINER=`james`@`%` PROCEDURE `Project_Status`(IN engineer VARCHAR(5))
BEGIN
DECLARE ls_engineer VARCHAR(5);
SET ls_engineer = IFNULL(engineer,'JM');
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 ep.engineer = ls_engineer ;
END$$
请注意:
SET ls_engineer = IFNULL(engineer,'JM');
是更容易阅读的速记,等同于:
IF ( engineer IS NULL ) THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
跟进
问:例如,如果我有“JM”,我希望程序选择所有记录,这是否可以在其中完成?
答:是的。比方说,如果输入参数具有 'JM'
的“特殊值”,您根本不需要对 ep.engineer
列进行任何限制,您可以通过向 WHERE 子句添加 OR 条件来调整查询...
WHERE ep.engineer = ls_engineer
OR engineer = 'JM'
如果输入参数 engineer
的值为 'JM'
,则 OR
之后的谓词将为所有返回 TRUE行,因此无论 OR
之前的部分返回 TRUE、FALSE 还是 NULL 都无关紧要,WHERE 子句的总体结果对于所有行都将为 TRUE。
但我建议 NULL
比 'JM'
更合适作为输入参数的特殊“返回所有行”值,不需要输入参数的“默认”值,即无需将 NULL 转换为 'JM'
。但这实际上取决于您的用例,但您可能会考虑完全绕过 JM
默认值,并在您的查询中执行如下操作:
WHERE ep.engineer = engineer
OR engineer IS NULL
问: ls_
前缀的原因/含义是什么?
答:
ls_
前缀只是我从 Oracle PL/SQL 时代起就使用的匈牙利风格符号;我只是发现它是一种方便的方式来帮助跟踪范围,并创建不与其他变量名称或 SQL 中的列名称冲突的变量名称。
在 SQL 语句中,我可以限定列名以避免歧义,但是没有办法限定变量(除了使用绑定(bind)参数)。
而且我可以定义一个与全局变量同名的局部变量,而我的局部变量会覆盖(隐藏)全局变量,这通常不是我想要的。
我不是很喜欢匈牙利符号,尤其是 Windows 风格的 lpszFoo
和 hwndBar
,但匈牙利符号在 Oracle PL/中对我来说很方便SQL。
我使用第一个字母来标识变量的范围,“l”表示局部,“g”表示全局,“a”表示参数。下一个字母是变量数据类型的简写,“s”代表 VARCHAR(字符串)类型,“d”代表 DATE,“n”代表 NUMBER。
所以,“as_”是一个参数字符串,“ld_”是一个本地日期,等等。
跟踪数据类型对于避免 SQL 中意外的隐式数据转换很重要,并使错误的显式转换看起来“错误”,例如不需要围绕“日期”的 TO_DATE() 或围绕数字的 TO_NUMBER,但需要将字符串转换为数字等。
关于MYSQL如果参数为空则设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22770227/
这个问题已经有答案了: Is there any way to accept only numeric values in a JTextField? (20 个回答) It's possible i
我使用戴尔 XPS M1710。笔记本电脑的盖子、侧面扬声器和前置扬声器都有灯(3 组灯可以单独调节)和鼠标垫下方的灯。在 BIOS 中,我可以更改这些灯的颜色,至少是每个组。另外,我可以在鼠标垫下打
我知道我可以使用 在 iOS 5 中打开设置应用 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"
我有一个 Django 应用程序,我正在尝试为其设置文档。目录结构如下: - doc - project | - manage.py 我已经设置了路径以便 Sphinx 可以看到东西,但是当我尝试使用
我正在使用 768mb ram 运行 centos 5.5。我一直在日志中获取 server reached MaxClients setting, consider raising the MaxC
我在具有以下配置的服务器内运行了 Drupal 安装: StartServers 5 MinSpareServers 5 MaxSpareServers 15 MaxClien
是否可以使用 Microsoft.Web.Administration 包为给定的 location 配置 asp 设置? 我想以编程方式将以下部分添加到本地 IIS applicationHost.
我一直在阅读为 kube-proxy 提供参数的文档,但没有解释应该如何使用这些参数。我使用 az aks create 创建我的集群使用 azure-cli 程序,然后我获得凭据并使用 kubect
我想知道与在 PHP 中使用 setcookie() 函数相比,在客户端通过 JavaScript 设置一些 cookie 是否有任何明显的优势?我能想到的唯一原因是减少一些网络流量(第一次)。但不是
我有一个按钮可以将 body class 设置为 .blackout 我正在使用 js-cookie设置cookie,下面的代码与我的按钮相关联。 $('#boToggle').on('click'
我有一堆自定义的 HTML div。我将其中的 3 存储在具有 slide 类的 div 中。然后,我使用该幻灯片类调用 slick 函数并应用如下设置: $('.slide').slick({
我正在创建一个应该在 Windows 8(桌面)上运行的应用 我需要: 允许用户使用我的应用启动“文件历史记录”。我需要找到打开“文件历史记录”的命令行。 我需要能够显示“文件历史记录”的当前设置。
我刚买了一台新的 MacBook Pro,并尝试在系统中设置 RVM。我安装了 RVM 并将默认设置为 ➜ rvm list default Default Ruby (for new shells)
由于有关 Firestore 中时间戳行为即将发生变化的警告,我正在尝试更改我的应用的初始化代码。 The behavior for Date objects stored in Firestore
在 ICS 中,网络 -> 数据使用设置屏幕中现在有“限制后台数据”设置。 有没有办法以编程方式为我的应用程序设置“限制后台数据”? 或 有没有办法为我的应用程序调出具有选项的“数据使用”设置? 最佳
我正在尝试使用 NextJS 应用程序设置 Jest,目前在 jest.config.js : module.exports = { testPathIgnorePatterns: ["/.n
我最近升级到 FlashDevelop 4,这当然已经将我之前的所有设置恢复到原来的状态。 我遇到的问题是我无法在新设置窗口的哪个位置找到关闭它在方括号、大括号等之前插入的自动空格的选项。 即它会自动
有没有办法以编程方式访问 iPhone/iPod touch 设置? 谢谢。比兰奇 最佳答案 大多数用户设置可以通过读取存储在 /User/Library/Preferences/ 中的属性列表来访问
删除某些值时,我需要选择哪些设置来维护有序队列。我创建了带有自动增量和主键的 id 的表。当我第一次插入值时,没问题。就像 1,2,3,4,5... 当删除某些值时,顺序会发生变化,例如 1,5,3.
我正在尝试设置示例 Symfony2 项目,如此处所示 http://symfony.com/doc/current/quick_tour/the_big_picture.html 在访问 confi
我是一名优秀的程序员,十分优秀!