drupal에서 저장 프로 시저를 실행하는 방법은 무엇입니까?


9

재무 데이터에 대한 많은 작업을 수행하는 웹 사이트가 있습니다. 대부분의 경우 대량의 데이터 작업이 필요합니다. 따라서 mysql 저장 프로 시저에서 해당 작업을 수행하는 것이 유용하다는 것을 알았습니다. 데이터베이스에 저장 프로 시저가 있습니다. drupal에서 저장 프로 시저를 어떻게 실행할 수 있는지 알고 싶습니다. drupal에서 저장 프로 시저를 실행하는 좋은 방법이 있습니까? drupal은 일반적으로 저장 프로 시저를 어떻게 처리합니까? 아니면 저장 프로 시저를 실행하기 위해 PHP를 사용해야합니까?


웹을 검색 했습니까? Google은 흥미로운 것으로 보이는 "중복 저장 프로 시저"에 대한 결과를 반환합니다. 코드를 사용해 보셨습니까? 무엇이 효과가 있었는지, 무엇이 효과가 없었는지 알려주시겠습니까?
marcvangend

1
예, Google에서 검색했습니다. 매개 변수를 사용하여 단일 저장 프로 시저를 실행하려면 몇 줄의 코드가 필요한 것 같습니다. Drupal API에 저장 프로 시저를 실행할 수있는 도우미 기능이 있습니까?
Mahesh Bhat

답변:


11

Drupal 7을 사용한다고 가정하면 다음과 같은 코드를 사용할 수 있습니다.

// Get the Drupal database connection and change the statement class to PDOStatement.
// Save the current class for cleanup later.
$conn = Database::getConnection();
$saved_class = $conn->getAttribute(PDO::ATTR_STATEMENT_CLASS);
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement'));

// Prepare the statement and bind params
$statement = $conn->prepare("Call GetNodeList(?,?)");

$op_status = $statement->bindParam(1, $node_type, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 25);
$op_status = $statement->bindParam(2, $publish_state, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);

// Execute the statement and reset the connection's statement class to the original.
$exec_result = $statement->execute();
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, $saved_class);

// Get your data
while ($row = $statement->fetchColumn(0)) {
  // ...
}

이 방법은 이 기사 에서 완전히 추론되었으며 과거에는 저에게 효과적이었습니다.


컬링 주셔서 감사합니다! "이 기사"로 참조 된 페이지가 해결되지 않습니다.
cdmo

0

이것이 올바른 방법인지 확실하지 않지만 그것은 나를 위해 일했습니다. Drupal과 동일한 Postgres 데이터베이스 서버를 공유하는 레거시 시스템이 있습니다.

제출 처리기에서 데이터를 처리하기 위해 저장 프로 시저 (Postgres에서 함수라고 함)가있는이 레거시 시스템으로 데이터를 보내야했습니다.

// Get legacy database connection set-up in settings.php
Database::getConnection('default', 'legacy')
  ->query('SELECT * FROM stored_procedure(:named_parameter_1, :named_parameter_2, ...);', [
    ':named_parameter_1' => $value_1,
    ':named_parameter_1' => $value_2,
    ...
  ]);

이것은 레거시 시스템에 데이터를 성공적으로 가져 왔습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.