>  Q&A  >  본문

mysql 프로시저는 unix 스크립트에만 상태를 반환해야 합니다.

디버깅을 위한 매개변수와 일부 인쇄 문이 있는 mysql 프로그램이 있습니다. 나는 Unix 쉘 스크립트에서 이 프로시저를 호출하고 있으며 나중에 조건을 확인하는 데 사용하는 unix 변수에 out 매개변수를 할당하는 것이 아이디어입니다. 그러나 변수는 print 문도 할당받고 있습니다. print 문을 제거하고 출력 매개변수(정수)만 변수에 할당하고 싶습니다.

Unix 스크립트:

으아악

인쇄된 명세서도 제공합니다

으아악

DBeaver와 같은 SQL 클라이언트에서 코드를 실행하면..출력 매개변수만 가져옵니다..

으아악 으아악

내 로그에 도움이 되는 인쇄/디버그 문을 비활성화하고 싶지 않습니다. 그러나 나는 그것들이 mysql out 변수와 궁극적으로 내 unix 변수에도 나타나는 것을 원하지 않습니다.

mysql 프로그램입니다

output_var=`mysql -sN test_db -e "call delete_me(@outs);select @outs"`
echo $output_var

P粉924915787P粉924915787378일 전519

모든 응답(2)나는 대답할 것이다

  • P粉203648742

    P粉2036487422023-09-09 07:57:11

    "디버그" 문은 stdout으로 출력되고 select @out; stdout으로도 출력되므로 MySQL 클라이언트는 둘을 구별할 수 없습니다. 프로세스에 출력 리디렉션 기능이 없습니다.

    그래서 창의적으로 생각해야 합니다.

    한 가지 아이디어는 필터링할 수 있도록 디버깅 문에 공통 패턴이 있는지 확인하는 것입니다. 예를 들어 "#DEBUG"라는 단어를 일관되게 사용하세요.

    으아악

    그런 다음 Bash에서 호출할 때 필터링하세요.

    으아악

    또 다른 아이디어는 디버그 문이 조건부로만 출력되도록 코드를 변경하는 것입니다.

    으아악

    디버그 출력을 원할 경우 다음과 같이 호출할 수 있습니다.

    으아악

    디버그 출력이 필요하지 않은 경우 @debug=1를 설정하지 마세요.

    가장 중요한 점은 MySQL 저장 프로시저는 많은 상황에서 정말 불편하다는 것입니다. 실제 디버거, 패키지, 컴파일러, 표준 라이브러리, 원자 배포 등이 없습니다. 나는 수년 동안 MySQL을 사용해 왔지만 이 프로그램을 잘 활용하는 경우는 거의 본 적이 없습니다.

    회신하다
    0
  • P粉818561682

    P粉8185616822023-09-09 00:57:17

    가정:

    • 디버그 문과 select @out은 OP의 원래 질문에서와 같이 별도의 줄에 표시됩니다.
    • 마지막 줄을 제외한 모든 내용을 로그 파일에 추가해야 합니다
    • 마지막 줄은 변수에 저장됩니다

    모든 출력을 변수로 캡처하는 OP의 현재 방법 복사본부터 시작하겠습니다.

    으아악

    마지막 줄을 제외한 모든 내용을 로그 파일에 추가하려면:

    으아악

    새 변수의 마지막 줄을 캡처하려면:

    으아악

    회신하다
    0
  • 취소회신하다