Windows 7에서 Oracle Data Integrator 11g로 일부 인터페이스를 테스트 중입니다. 모든 인터페이스에서 LKM MSSQL to Oracle (BCP/SQLLDR)을 사용하고 있습니다. "자이 썬을 통해 SQLLDR 호출"명령.ODI - Windows 쉘에서 Jython을 통해 SQLLDR을 호출하십시오.
exitCode = os.system(sqlldr + " control=" + tempSessionFilePrefix + ".ctl log=" + tempSessionFilePrefix + ".log " + "userid=" + "<% out.print(odiRef.getInfo("DEST_USER_NAME")); %>" + "/" + "<% out.print(odiRef.getInfo("DEST_PASS")); %>" + tnsnameOption + " > " + tempSessionFilePrefix +".out");
그것은의 형태로 Windows 셸의에 문자열을 실행해야합니다 : 일부 invesetigation 후 나는 문제의 근본 다음 코드 줄 것을 발견했다 내가 실행 않았다
sqlldr control=control_file.ctl log=log_file.log userid=ODI_STAGE/ODI_STAGE > shell_output.out
문자열을 명령 프롬프트에 직접 생성하고 아무런 문제없이 작동했습니다.
따라서 코드를 조금 재생 한 후에 으로 바꿔서 os.system
을 작동시키지 못했습니다. 이 일이 원활하게 작동
exitCode = subprocess.call([sqlldr, "control=" + tempSessionFilePrefix + ".ctl", "log=" + tempSessionFilePrefix + ".log", "userid=" + "<% out.print(odiRef.getInfo("DEST_USER_NAME")); %>" + "/" + "<% out.print(odiRef.getInfo("DEST_PASS")); %>" + tnsnameOption], shell=True);
: 그것은 모든 것을 작동하게하는 명령 프롬프트 (> shell_output.out
)의 OUPUT을 저장하려고 어디 또한 문자열의 마지막 부분을 제거해야합니다.
쉘 출력에 관해서는 문제가 프롬프트에 대한 명령 대신 SQLLDR 인수의 일부로 구문 분석되는 '>'charcater로 시작하는 문자열 부분이라고 생각됩니다. 자, 내가 없이는 살 수있는 동안, 나는 쉘 출력을 얻기위한 간단한 해결 방법을 알고 있는지 묻고 싶다.