내 함수 호출에 어떤 문제가 있습니까?JMP(Matlab에서 제공)에서 함수를 작성하고 호출하는 방법을 배우고 있습니다.
SQL 쿼리를 통해 데이터베이스에서 테스트된 부분에 대한 데이터를 가져오려고 합니다.
두 개의 별도 스크립트를 작성했습니다. 하나는 입력 변수로 PartID를 사용하고 출력으로 테스트 데이터 테이블을 사용하는 함수입니다.
다른 스크립트는 함수 호출인데 partID를 함수에 전달할 수 없는 것 같습니다. 내가 어디로 잘못 가고 있습니까?
내 함수 호출
partDataTable = getDataTable4partID("PART16.0009")내 기능
getDataTable4PartID = Function( {PartID},{partDataTable},
Open Database(
"Driver=SQL Server;
Server=XAB-SQL02;
DATABASE=TBSDF;
Trusted_Connection=Yes;",
"SELECT * FROM dbo.View_BBX a WHERE a.Part like 'PartID' AND a.TestDateTime > '2021-02-01'",
"partDataTable" // name of the output data table
);
);SQL 쿼리 자체는 PartID가 실제 부품 번호 PART16.0009로 대체되고 별도로 원하는 데이터 테이블을 뱉어낼 때 작동하지만 함수 호출을 사용할 때 데이터 테이블에는 여전히 Source/Update From DB 스크립트에 'PartID'가 있습니다. 빈 데이터 테이블에서
데이터 테이블스크립팅창Re: 함수 호출에 무엇이 잘못되었나요?스크립팅 인덱스 및 에서 기능 확인 프로그래밍 함수 - 함수 . 또한 확인 스크립팅 가이드
현재 사용하지 않는 getDataTable4PartID에 대한 로컬 변수로 partDataTable과 인수로만 PartID가 있습니다. 대부분의 경우 인수에 대해 다음과 같이 정의된 함수를 원할 것입니다.
getDataTable4PartID = Function( {PartID, partDataTable},
그것을 정렬한 후에는 함수 내부의 표현식에서 인수를 사용하는 방법을 알아내야 합니다. PartID의 경우 Open Database에서 직접 사용하려는 SQL 쿼리 및 partDataTable에 연결하려고 합니다.
Open Database(
"Driver=SQL Server;
Server=XAB-SQL02;
DATABASE=TBSDF;
Trusted_Connection=Yes;",
"SELECT * FROM dbo.View_BBX a WHERE a.Part like '"||PartID||"' AND a.TestDateTime > '2021-02-01'",
partDataTable // no need for quotes here
);
Re: 함수 호출에 무엇이 잘못되었나요?감사 해요. 이것은 작동합니다. 그러나 따옴표가 있는 partDataTable도 잘 작동한다는 점에 주목했습니다. 이래야 되나?
Re: 함수 호출에 무엇이 잘못되었나요?따옴표로 묶은 경우 데이터 테이블의 이름을 원하는 이름이 아닌 partDataTable로 지정할 가능성이 큽니다(인수로 사용하려는 경우).
Re: 함수 호출에 무엇이 잘못되었나요?@jthi . 흠, 하지만 출력 데이터 테이블을 호출할 이름을 얻고 있습니다(즉, 내 partID와 동일).이것은 내 함수 호출입니다.
partDataTable = getDataTable4partID("PART16.0009","PART16.0009")
Re: 함수 호출에 무엇이 잘못되었나요?나는 방금 무언가를 깨달았고 이것이 실제로 사실인지 확인해야합니다. 함수를 변경한 후 변경 사항을 적용하려면 함수를 한 번 실행해야 하는 것 같습니다. 저축만으로는 부족해 보입니다. 이 올바른지?
나는 따옴표를 적용했다 partDataTable을 만들고 내 기능을 저장했습니다. 함수 호출은 내가 원하는 데이터 테이블 이름으로 예상대로 작동했습니다. 그러나 함수를 한 번 실행한 후 함수 호출을 다시 실행하면 생성된 데이터 테이블 파일의 이름으로 partDataTable이 표시됩니다.
Re: 함수 호출에 무엇이 잘못되었나요?예(질문을 이해하는 경우), 할당된 변수(귀하의 예제에서는 getDataTable4PartID)에서 컴파일된 함수를 대체하려면 "function(...)" 함수를 실행해야 합니다.
그것이 보이는 것처럼 명확하지 않은 경우 다시 질문하십시오 ...
나만의 함수 작성 흥미로울 수도 있습니다.
Re: 함수 호출에 무엇이 잘못되었나요?예, "업데이트"하려면 기능을 한 번 실행해야 합니다.
데이터 테이블의 이름을 PartID와 동일하게 지정하려면 함수에서 하나의 인수만 사용할 수 있습니다. 따옴표가 있고 따옴표가 없는 버전이 있는 좀 더 완전한 예는 다음과 같습니다.
Names Default To Here(1);
getDataTable4PartID_withQuotes = Function({PartID},
Open Database("connectionstring",
"
select '" || PartID || "' as value
from dual
",
"PartID"
);
);
partDataTable_withQuotes = getDataTable4PartID_withQuotes("PART16.0009");
Show(partDataTable_withQuotes);
getDataTable4PartID = Function({PartID},
Open Database("connectionstring",
"
select '" || PartID || "' as value
from dual
",
PartID
);
);
partDataTable = getDataTable4PartID("PART16.0009");
Show(partDataTable);나를 위해 이들은 로그에 인쇄됩니다.
partDataTable_withQuotes = DataTable("PartID");
partDataTable = DataTable("PART16.0009");
JMP는 함수에서 데이터 테이블을 반환하지만("마지막" 행이므로) 데이터 테이블을 신뢰하는 것이 불편하므로 함수에서 로컬 참조를 사용한 다음 참조를 반환하면 최종 함수는 다음과 같을 것입니다.
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);