GVKun编程网logo

如何将变量传递给IN子句?(变量值传递)

15

针对如何将变量传递给IN子句?和变量值传递这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AHK如何将变量传递给函数内部的“运行”?、BASH将变量传递给函数、c–将变量传递给函数的成本、c

针对如何将变量传递给IN子句?变量值传递这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展AHK 如何将变量传递给函数内部的“运行”?、BASH将变量传递给函数、c – 将变量传递给函数的成本、c# – 如何将变量传递给另一个线程等相关知识,希望可以帮助到你。

本文目录一览:

如何将变量传递给IN子句?(变量值传递)

如何将变量传递给IN子句?(变量值传递)

可以说我有一个SP,其SELECT语句如下:

SELECT product_id, product_price FROM product WHERE product_type IN (''AA'',''BB'',''CC'');

但是数据IN必须通过包含值字符串的单个变量到达该子句。以下内容链接

SELECT product_id, product_price FROM product WHERE product_type IN (input_variables);

但是它不能那样工作。任何想法如何做到这一点?

答案1

小编典典

像这样传递参数值-
''AA,BB,CC''。然后,使用FIND_IN_SET函数就足够了-

SELECT product_id, product_priceFROM productWHERE FIND_IN_SET(product_type, param);

AHK 如何将变量传递给函数内部的“运行”?

AHK 如何将变量传递给函数内部的“运行”?

如何解决AHK 如何将变量传递给函数内部的“运行”??

我对自动热键相当陌生,最近在尝试将变量作为自动热键中“运行”命令的参数传递时遇到了一个问题。任何人都可以告诉我我缺少什么还是这是一个错误?

Gui,Setup:Add,Edit,w100 vProgram
Gui,Button,Default w100 gSubmit,OK
Gui,Setup:Show,Setup
WinWaitClose,Setup
ExitApp

Submit:
    Gui,Setup:Submit
    RunStuff()

RunStuff() {
    Run,%Program%
}

我什至尝试将行更改为:

RunStuff() {
    run,Program
}

非常感谢您的帮助,提前致谢。

解决方法

首先,同时

WinWaitClose,Setup
ExitApp

也许是聪明的想法,您应该通过定义名称为 GuiClose 的函数(或标签)来使用 GuiClose event 做到这一点。

GuiClose()
{
    ExitApp
}

另外,给 gui 一个名字是多余的,尽管如果你打算添加更多的 gui,那就足够了。

要运行 cmd 命令,您需要使用 /c(docs) 开关启动 cmd。
您的示例 netsh wlan connect ssid=%networkname% name=%networkname% 会这样做:

networkname := "name"
Run,%A_ComSpec% /c netsh wlan connect ssid=%networkname% name=%networkname%
Run,% A_ComSpec " /c netsh wlan connect ssid=" networkname " name=" networkname

第一行是旧语法,我真的不推荐它。
第二行是表达式语法。

内置变量 A_ComSpec(docs) 包含 cmd.exe 的路径。

基于您的代码在记事本中打开文件的示例程序:

Gui,Setup:Add,Edit,w300 vFilePath,% "C:\Users\User\Desktop\this is a text file.txt"
Gui,Button,Default w100 gSubmit,OK
Gui,Setup:Show,Setup
return

Submit:
    Gui,Setup:Submit
    Run,% "notepad.exe """ FilePath """"
return

GuiClose()
{
    ExitApp
}

注意文件路径如何包含空格,因此参数需要用引号括起来。
"""" 可能看起来很奇怪,但在 AHK 中引用是 escaped 与另一个引用。因此,外部引号指定您正在编写字符串,而内部 "" 只是一个转义的引号。所以这会产生 "

在学习 AHK 时,遗留语法与现代表达式语法可能会有点混乱。当您查找内容时,您会看到很多遗留语法。这主要是因为 AHK 在几年前更加流行(当时可以使用遗留语法)。
要开始了解遗留与现代表达的差异,这里有一个非常好的文档页面:
https://www.autohotkey.com/docs/Language.htm


编辑:
回答通过编辑添加到 OP 中的新问题。

RunStuff() {
    Run,%Program%
}

变量 Program 未在函数作用域中定义。

让我们考虑这个示例代码

var1        := 1
var2        := 2
global var3 := 3
function()
return

function()
{
    global var2
    MsgBox,% "var1: " var1 "`nvar2: " var2 "`nvar3: " var3 "`n"
}

var1 未在函数作用域中定义,因此消息框中不会打印任何内容。
由于 var2 行,global var2 将在函数作用域之外使用。
var3 也可以在函数作用域之外使用,因为 var3 被定义为超级全局。真的不推荐超级全局,因为任何地方都将使用该变量。在较大的脚本上很容易遇到问题,但对于较小的脚本来说很方便,例如,您知道自己将要做什么并且没有任何外部库。
您可以从这里阅读相关文档:
https://www.autohotkey.com/docs/Functions.htm#Locals

,

您似乎认为您的问题出在 gui 输出上。

我认为您可能想以不同的方式检查:

您可以创建一个脚本来分析您的运行输入。

例如:

脚本 #1,我们称之为“1.ahk”

Run,2.ahk param1 param 2 "param 3"

脚本 #2,我们称之为“2.ahk”

txt := "Params as seen by ahk:`n"
for i,param in A_Args
    txt .= i " = " param "`n"
MsgBox % txt

通过运行脚本“1.ahk”你可以看到“2.ahk”创建的消息:

Params as seen by ahk:
1 = param1
2 = param
3 = 2
4 = param 3

我认为这很能说明它如何理解空格以及引号如何防止拆分参数。

现在,如果您针对“2.ahk”运行 gui 输出,您可能会看到与之前看到的有所不同的内容。

BASH将变量传递给函数

BASH将变量传递给函数

这是我第一次尝试BASH,我遇到了一个小问题.
此脚本的目的是擦除ZFS池并创建日志文件.

代码按预期工作,除了下面的第19行. (LogEntry $LOG_LINE).
为了调试目的,我添加了第18行,它正在运行.

第18行将“pool’tankm’健康”写入日志,而第19行只写“pool”.从功能上讲,这些线路做的是同样的事情(至少在我眼里),所以为什么一个工作而不是另一个工作.

我假设根casue是zpool status命令输出中池名称之前的引用,我正在为此替换char,但我会理解这两行是如何以不同方式进行间接的.

提前致谢
戴克澜

#!/bin/bash

LOG_FILE=/home/declan/log/zfs_scrub
LOG_LAST=/home/declan/log/zfs_scrub_last

function LogEntry {
    echo -e "$(date "+%Y %m %d %T") ; $1" >>$LOG_FILE 2>&1
}

cp $LOG_FILE $LOG_LAST
rm $LOG_FILE

LogEntry "Starting ZFS Scrub"

for POOL in $(zpool list -H -o name) ; do
    LogEntry "Starting Scrub on $POOL"
    zpool scrub $POOL 2>/dev/null
    LOG_LINE=$(zpool status -x $POOL 2>&1)
    echo -e "$(date "+%Y %m %d %T") ; $LOG_LINE" >>$LOG_FILE 2>&1
    LogEntry $LOG_LINE
    LogEntry "Ending Scrub on $POOL"
done

LogEntry "Ending ZFS Scrub"

解决方法

你必须在$LOG_LINE周围添加双引号:

LogEntry "$LOG_LINE"

否则,由空格分隔的每个元素都被解释为LogEntry函数的专用参数.

或者,您可以更改您的函数并使用$*或$@来引用所有参数:

function LogEntry {
    echo -e "$(date "+%Y %m %d %T") ; $*" >>$LOG_FILE 2>&1
}

c – 将变量传递给函数的成本

c – 将变量传递给函数的成本

我不确定函数调用是如何被翻译的,我担心传递的变量会在不需要时被复制到局部变量中.我可以通过使用全局变量避免不必要的复制,但这不是一个好的解决方案……

1)当目标函数中的变量没有改变时,将它们作为指针,引用或const传递会更好吗?

void fkt1(int i,int j){
  do_something();
  printf("%d",i+j);
}

int main(){
  int i = 5;
  int j = 6;
  fkt1(i,j);
}

2)当变量未在其中使用时将变量传递给函数是否昂贵.例如,保持通用接口,例如:

template <typename T>
void fkt2(T a,T b,int len = -1){ 
  do_something();
  printf("%d",a+b);
}

template<>
void fkt2<char*>(char* a,char* b,int len){
  do_something();
  strcpy(a+len,b);
  printf("%s",a);
}

要么

class base{
public:
  virtual bool calc(int i,int j,int k,int l) = 0;
  base *next1;
  base *next2;
}

class derived1 : public base{
public:
  bool calc(int i,int l){
    return (next1->calc(int i,int l) || 
            next2->calc(int i,int l))
  }
}    

class derived2 : public base{
public:
  bool calc(int i,int l){
    return (return i+j > 5)
  }
}    

class derived3 : public base{
public:
  bool calc(int i,int l){
    return (return j*k < l)
  }
}

评论非常感谢.

解决方法

此时不要担心性能问题.

专注于功能的算法成本,而不是琐碎的事情:猜测性能问题是一个坏主意.

如果您确实遇到了性能问题并且具有可维护的代码,那么仍然需要时间来改进它.

现在要真正回答这个问题:

当您必须传递的对象确实不应该被复制时,您可以传递const引用.如果你必须传递整数或简单的结构(也就是小类型),使用const引用甚至指针可能工作太多:如果编译器可能无论如何都会对事物进行优化,那么你将会以非常复杂的方式混乱代码.

c# – 如何将变量传递给另一个线程

c# – 如何将变量传递给另一个线程

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Taking data from Main Thread\n->");
        string message = Console.ReadLine();

        ThreadStart newThread = new ThreadStart(delegate { Write(message); });

        Thread myThread = new Thread(newThread);

    }

    public static void Write(string msg)
    {
        Console.WriteLine(msg);
        Console.Read();
    }
}
}

解决方法

如果您有一些数据要使用您的呼叫序列“流动”某些数据,也可以使用 CallContext. Here is a good blog posting about LogicalCallContext from Jeff Richter.
using System;  
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
  class Program 
  { 
    static void Main(string[] args) 
    { 
        Console.WriteLine("Taking data from Main Thread\n->"); 
        string message = Console.ReadLine(); 

        //Put something into the CallContext
        CallContext.LogicalSetData("time",DateTime.Now);

        ThreadStart newThread = new ThreadStart(delegate { Write(message); }); 

        Thread myThread = new Thread(newThread); 

    } 

    public static void Write(string msg) 
    { 
        Console.WriteLine(msg); 
        //Get it back out of the CallContext
        Console.WriteLine(CallContext.LogicalGetData("time"));
        Console.Read(); 
    } 
  } 
}

关于如何将变量传递给IN子句?变量值传递的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AHK 如何将变量传递给函数内部的“运行”?、BASH将变量传递给函数、c – 将变量传递给函数的成本、c# – 如何将变量传递给另一个线程等相关知识的信息别忘了在本站进行查找喔。

本文标签: